连接一组对象,在java中按值分组
我在拍Set的对象是包括name和value。我的要求是Set通过将Set具有相同value和concate属性的基于对象分组name为一个string由",".
例子:
Name: Test, value: Random value
Name: Test 2, value: Some random value
Name: Test 3, value: Random value
我希望结果是这样的Set:
Name: Test, Test 3, value: Random value
Name: Test 2 , value: Some random value
该班的理解:
public class Test {
private String name;
private String value;
}
如何创建一个新Set的分组Set依据value和串联的name成string使用Java流?
回答
toMap与合并一起使用(另外流元素在按名称排序之前):
Set<Test> result = s.stream()
.sorted((t1,t2)-> t1.getName().compareTo(t2.getName()))
.collect(Collectors.toMap(Test::getValue,
Function.identity(),
(t1,t2)-> new Test(t1.getName()+","+t2.getName(),
t1.getValue())))
.values()
.stream()
.collect(Collectors.toSet());