当前位置: 首页 > 知识库问答 >
问题:

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

薄瑞
2023-03-14

如何使用stream转换下面的代码而不使用for each循环。

  1. getAllSubjects()返回所有列表,每个主题都有列表 。所有列表应合并为列表
  2. 需要从列表
  3. 中获取 映射

对象模型:

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));

}

共有1个答案

寿子轩
2023-03-14

请在此处使用flatmap以不再进行流式处理。请注意,这个tomap假定不会有重复键(或空键)

list.stream()
    .filter(e -> subjectId.equals(e.getId()))
    .flatMap(subject -> subject.getTopics().stream())
    .collect(Collectors.toMap(Topic::getId, Topic::getName));
 类似资料:
  • 我有一个lambda表达式,我想在其中创建一个对象列表,但我得到了错误 错误 我希望作为lambda表达式的返回类型。我怎样才能做到呢?

  • 我有一个类,有多个成员。 还有一个类,只有两个属性: 我需要遍历类中的各种列表,并创建类对象,并添加到这样的列表中: 这里重复了if和for循环。 如何使用Java流实现这一点? 注意:类,和之间没有关系,也没有公共接口。

  • 我正在查看的文档,我看到了方法,但无法直接转到 是否有方法将转换为?

  • 我正在尝试将列表拆分为列表列表,其中每个列表的最大大小为4。 我想知道如何使用lambdas做到这一点。 目前我的做法如下: 更新 似乎没有一种简单的方法可以使用lambdas来拆分列表。虽然所有的答案都很受欢迎,但它们也是一个很好的例子,说明lambdas不能简化事情。

  • 问题内容: 假设我有一个元组列表,并且我想转换为多个列表。 例如,元组列表是 Python中是否有任何内置函数可以将其转换为: 这可以是一个简单的程序。但是我只是对Python中存在这种内置函数感到好奇。 问题答案: 内置功能几乎可以满足您的需求: 唯一的区别是您得到元组而不是列表。您可以使用将它们转换为列表

  • 问题内容: 我已经编写了此函数,用于将元组列表转换为列表列表。有没有更优雅的/ Pythonic的方式来做到这一点? 问题答案: 您可以使用列表推导: