2017-09-15 53 views
0

我有这个类:的Java 8收藏家用绳子串联

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只包含两个值,一个Stringint

我想将此数据按其age值分组,但也要连接name。在最后我想获得一个Map<Integer, String>这样的:

25 - One 
18 - TwoThree 
10 - Four 

我尝试这样做:

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

有喜欢summingInt方法,但找不到String值什么。

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

有没有一个优雅的方式来建立在Collectors或我必须做我自己的?

+3

听起来像你正在寻找'Collectors.joining'。 –

+0

如何在''Collectors.joining''中指定我想连接'name'的值?据我所知,你可以将它应用于“String”列表,但我在这里列出了'Pair'' –

+2

'Collectors.mapping(Pair :: getName,Collectors.joining())''。 –

回答

3

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