Stream collect groupingBy输出自定义

Stream collect groupingBy output customization

我有一个 JAVA class 描述如下:

public class Hello {
   
   public String field1;
   public String field2;
   public String field3;

}

现在我有 listHello 个对象,我想按 field1 对列表元素进行分组。我的问题是,我只想将一组 field3 作为分组元素,而不是所有 Hello 对象字段。

例如,作为输出,我想得到一张地图:

field1Value1 -> [field3Value1, field3Value2, field3Value3]
field1Value2 -> [field3Value4, field3Value5, field3Value6]

我当然尝试过使用蒸汽来做到这一点:

HelloList.stream.collect(Collectors.groupingBy(Hello::field1, Collectors.toSet()));

像上面一样,我将得到一组由 field1 映射的 Hello 对象,不幸的是,这不是我想要的。

我想你在找 Collectors.mapping:

helloList.stream()
    .collect(groupingBy(Hello::field1, mapping(Hello::field3, toSet())));

一般来说,手头有 Collectors 的 Javadoc 是个好主意,因为有许多有用的组合操作(例如这个 mapping 及其逆 collectingAndThen ),当您有这样的问题时,查看列表以找到合适的工具是很有用的。