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

Java 8:在同一个流中映射类的多个属性

庾波光
2023-03-14

你好,我的问题与Java8非常相似:流映射同一个流中的两个属性,但由于某些原因,我无法让代码正常工作。

所以就像这个问题一样,假设我有一个班级模型

class Model {
    private List<Integer> listA;
    private List<Integer> listB;
    private List<Integer> listC;
    public List<Integer> getListA() {
        return listA;
    }

    public List<Integer> getListB() {
        return listB;
    }
    public List<Integer> getListC() {
        return listC;
    }
}

所以我想从列表中组合这些列表

myList.stream()
      .flatmap(i -> Stream.of(i.getListA(), i.getListB(), i.getListC()))
      .collect(Collectors.toList())
      .get(0)

但是这种方法最终会返回一个空列表。我会感谢任何建议


共有2个答案

屠坚壁
2023-03-14

与链接问题的不同之处在于,您有三个层次:一系列<code>模型</code>s,每个模型都有多个属性。这些属性是<code>列表</code>s,因此它们也可能包含多个元素。

现在您可以使用<code>平面图</code>两次而不是一次。

myList.stream()
    .flatMap(model -> Stream.of(model.getListA(), model.getListB(), model.getListC())
        .flatMap(List::stream))
    .toList();
常甫
2023-03-14
匿名用户

您必须用< code>Stream.concat连接这3个列表。一旦你连接了这些流(不要交叉!),将它们平面映射到< code >流

myList.stream()
      .flatMap(m -> Stream.concat(Stream.concat(m.getListA().stream(),
                                  m.getListB().stream()),
                    m.getListC().stream()))
      .collect(Collectors.toList());

List<Model> models = List.of(
    new Model(Arrays.asList(1, 2, 3), Arrays.asList(4, 5, 6), Arrays.asList(7, 8, 9)),
    new Model(Arrays.asList(11, 12, 13), Arrays.asList(14, 15, 16), Arrays.asList(17, 18, 19)),
    new Model(Arrays.asList(21, 22, 23), Arrays.asList(24, 25, 26), Arrays.asList(27, 28, 29))
);

输出是:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29]

 类似资料:
  • 我有一个类具有以下签名: 我想将映射到在单个流中同时包含stringA和stringB的 或: 当然他们都不编译,但你明白了。 编辑: 示例:

  • 对特定的持久化类,映射多次是允许的。这种情形下,你必须指定 entity name 来区别不同映射实体的对象实例。(默认情况下,实体名字和类名是相同的。) Hibernate 在操作持久化对象、编写查询条件,或者把关联映射到指定实体时,允许你指定这个 entity name(实体名字)。 <class name="Contract" table="Contracts" entity

  • 我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?

  • 假设我有以下工作的lambda表达式: 我想在过滤器语句之前创建一个具有2个值的流。所以我想做一个映射,但仍然保留原始值。我想实现这样的事情: 这可能与Java8流?我已经看了收集(GroupingBy()),但仍然没有成功。

  • 问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那

  • 由于我不想多次使用流来单独收集每个属性,也不想使用来收集每个属性,是否有任何方法可以用单个流来获得上述属性。