Stream collect groupingBy输出自定义
Stream collect groupingBy output customization
我有一个 JAVA class 描述如下:
public class Hello {
public String field1;
public String field2;
public String field3;
}
现在我有 list
个 Hello
个对象,我想按 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
),当您有这样的问题时,查看列表以找到合适的工具是很有用的。
我有一个 JAVA class 描述如下:
public class Hello {
public String field1;
public String field2;
public String field3;
}
现在我有 list
个 Hello
个对象,我想按 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
),当您有这样的问题时,查看列表以找到合适的工具是很有用的。