如何使用Java8流将列表列表转换为单个列表[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Java8流将列表列表转换为单个列表[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

如何使用流转换以下代码而不使用每个循环。

  1. getAllSubjects()返回所有List,每个Subject都有List<Topic>。所有列表应合并为List<Topic>
  2. 需要从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流将列表列表转换为单个列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用流将列表转换为带有索引的地图 - Java 8?

使用流将对象列表转换为从 toString 方法获得的字符串

如何使用 linq 将列表中的列表转换为单个列表 [重复]

将数据帧列表转换为R中的单个数据帧[重复]

如何将列表列表转换为 Java 8 中的列表?

将字符列表转换为字符串[重复]