【问题标题】:Stream collect groupingBy output customization流收集分组输出自定义
【发布时间】:2021-01-04 14:15:15
【问题描述】:

我有一个如下描述的 JAVA 类:

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

}

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

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

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

我当然尝试过使用 Steam:

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

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

【问题讨论】:

  • 至少对我来说不是很清楚你想要什么,你能用一些例子来修改这个问题
  • 在输出映射中,我希望 key 是 field1 和一组 field3 作为值。

标签: java stream java-stream collectors


【解决方案1】:

我想你在找Collectors.mapping

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

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

【讨论】:

  • 它有效,谢谢。我会考虑你的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
相关资源
最近更新 更多