【发布时间】: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<Integer, String>:
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