Uma*_*ari 7 java concat distinct-values java-8 java-stream
我有2个Java类.
class A {
String name;
List<B> numbers;
}
class B {
Integer number;
}
Run Code Online (Sandbox Code Playgroud)
我希望得到A类的独特之处并将其中的B列表连接起来.
例如,假设我有一个包含以下对象的List.
List<A>{
name = "abc"
List<B>{1,2}
name= "xyz"
List<B>{3,4}
name = "abc"
List<B>{3,5}
}
Run Code Online (Sandbox Code Playgroud)
结果应该是:
List<A>{
name = "abc"
List<B>{1,2,3,5}
name="xyz"
List<B>{3,4}
}
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
注意:我想使用Java 8流实现此功能.
谢谢
您可以使用toMap
收集器:
Collection<A> result = list.stream()
.collect(Collectors.toMap(a -> a.name, a -> a,
(a, b) -> {a.numbers.addAll(b.numbers); return a;}))
.values();
Run Code Online (Sandbox Code Playgroud)
您可以将之后的结果复制到List
(like new ArrayList<>(result)
) 中,但由于我们不保留任何特定顺序,因此具有List
并不是很有用。在大多数情况下,有Collection
这样的结果就很好。