相关疑难解决方法(0)

Java 8嵌套(多级)组

我有几个类,如下

class Pojo {
    List<Item> items;
}

class Item {
    T key1;
    List<SubItem> subItems;
}

class SubItem {
    V key2;
    Object otherAttribute1;
}
Run Code Online (Sandbox Code Playgroud)

我想根据key1每个聚合聚合项目,子项目应按key2以下方式聚合:

Map<T, Map<V, List<Subitem>>
Run Code Online (Sandbox Code Playgroud)

Java 8 Collectors.groupingBy嵌套有什么可能吗?

我正在尝试一些东西并且中途停留

pojo.getItems()
    .stream()
    .collect(
        Collectors.groupingBy(Item::getKey1, /* How to group by here SubItem::getKey2*/)
    );
Run Code Online (Sandbox Code Playgroud)

注意:这与级联不同groupingBy,后者根据此处讨论的同一对象中的字段进行多级聚合

java collections lambda java-8 java-stream

16
推荐指数
1
解决办法
9874
查看次数

使用groupingBy的类的属性的Flat-Mapping Collector

我有这门课.

class Assignment {
  private Integer index;
  private List<Quantity> quantities;
}
Run Code Online (Sandbox Code Playgroud)

然后,我有一个来自该类的对象列表.

List<Assigment> assignments = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

有没有办法创建一个Map包含索引AssignmentList<Quantity>as值的方法?

这是我到目前为止所尝试的.

assignments.stream().collect(groupingBy(Assignment::getIndex));
Run Code Online (Sandbox Code Playgroud)

但这给了我一个Map<Integer, List<Assignment>>,我想要一个Map<Integer, List<Quantity>>.

我已经尝试过使用forEach方法 - 它可以工作 - 但我确信必须有一种方法可以在一个衬里中完成它 - 或者至少只使用collectgroupingBy方法

java java-8 java-stream

6
推荐指数
1
解决办法
1301
查看次数

标签 统计

java ×2

java-8 ×2

java-stream ×2

collections ×1

lambda ×1