【问题标题】:Java 8 Collector with string concatenating具有字符串连接的 Java 8 收集器
【发布时间】:2017-09-16 08:26:08
【问题描述】:

我有这门课:

class Pair {
    public String name;
    public int age;
}

还有一个清单:

List<Pair> list = new LinkedList<>();
list.add(new Pair("One", 25));
list.add(new Pair("Two", 18));
list.add(new Pair("Three", 18));
list.add(new Pair("Four", 10));

其中Pair 只包含两个值,一个String 和一个int

我想按其age 值对这些数据进行分组,但还要连接name。最后我想像这样获得Map&lt;Integer, String&gt;

25 - One
18 - TwoThree
10 - Four

我试过这个:

list.stream().collect(Collectors.groupingBy(Pair::getValue, /* Collectors.??? */));

summingInt 之类的方法,但找不到String 值的任何内容。

我看到有一个Collectors.reducing 方法,我猜也许我们可以使用它,但不确定如何使用。

有没有一种优雅的方式来构建Collectors 或者我必须自己制作?

【问题讨论】:

  • 听起来你在找Collectors.joining
  • 如何在Collectors.joining 中指定我想连接name 值?据我所知,您可以将其应用于String 的列表,但我这里有Pair 的列表
  • Collectors.mapping(Pair::getName, Collectors.joining()).
  • 啊哈,Collectors.mapping 是这里的关键)。现在可以了,谢谢。
  • 顺便说一句,Collectors#joining 是用StringJoiner 实现的。 finally java-8 中用于连接字符串的类 ;)

标签: java java-stream


【解决方案1】:

只需使用Collectors.mapping(Pair::getName, Collectors.joining())joining 处理字符串,mapping 从 pair 对象中提取它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2017-09-15
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    相关资源
    最近更新 更多