如何使用Java8流将列表列表转换为单个列表[重复]
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Java8流将列表列表转换为单个列表[重复]相关的知识,希望对你有一定的参考价值。
这个问题在这里已有答案:
如何使用流转换以下代码而不使用每个循环。
- getAllSubjects()返回所有List,每个Subject都有
List<Topic>
。所有列表应合并为List<Topic>
。 - 需要从
Map<id,topicName>
获得List<Topic>
对象模型:
Subject
id,....
List<Topic>
Topic
id,name
public Map<String, String> getSubjectIdAndName(final String subjectId) {
List<Subject> list = getAllSubjects(); // api method returns all subjects
//NEEDS TO IMPROVE CODE USING STREAMS
list = list.stream().filter(e -> e.getId().equals(subjectId)).collect(Collectors.toList());
List<Topic> topicList = new ArrayList<>();
for (Subject s : list) {
List<Topic> tlist = s.getTopics();
topicList.addAll(tlist);
}
return topicList.stream().collect(Collectors.toMap(Topic::getId, Topic::getName));
}
答案
在这里使用flatMap
,不再流。请注意,这个toMap
假设没有重复的键(或空值)
list.stream()
.filter(e -> subjectId.equals(e.getId()))
.flatMap(subject -> subject.getTopics().stream())
.collect(Collectors.toMap(Topic::getId, Topic::getName));
以上是关于如何使用Java8流将列表列表转换为单个列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章