java - 如何在 Java 8 中使用 concat 获取不同的对象列表

标签 java java-8 java-stream concat distinct-values

我有 2 个 Java 类。

class A {
 String name;
 List<B> numbers;
}

class B {
 Integer number;
}

我想得到 A 类的不同,并在其中连接 B 的列表。

例如假设我有一个包含以下对象的列表。

List<A>{
 name = "abc"
 List<B>{1,2}

 name= "xyz"
 List<B>{3,4}

 name = "abc"
 List<B>{3,5}
}

结果应该是:

List<A>{
 name = "abc"
 List<B>{1,2,3,5}

 name="xyz"
 List<B>{3,4}
}

如有任何帮助,我们将不胜感激。

注意:我想使用 Java 8 流实现此功能。

谢谢

最佳答案

您可以使用 toMap Collection 家:

Collection<A> result = list.stream()
         .collect(Collectors.toMap(a -> a.name, a -> a, 
                      (a, b) -> {a.numbers.addAll(b.numbers); return a;}))
         .values();

您可以将之后的结果复制到List中(如 new ArrayList<>(result) ),但由于我们不保留任何特定顺序,所以 List不是很有用。在大多数情况下 Collection结果很好。

关于java - 如何在 Java 8 中使用 concat 获取不同的对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36167945/

相关文章:

methods - 如何将 Stream 操作参数添加到我的函数中?

java - 使用 Java 将 AWS 文件上传到 S3

java - 线程和静态方法

java - 如何使用流对列表进行排序?

java - 将 for 循环转换为 concat String 为 lambda 表达式

java - 如何使用 Java8 流将 Map<X, Map<Y,Z>> 转换为 Map<Y, Map<X,Z>>

java - 在一个特定页面上给出 "java.net.SocketTimeoutException: Read timed out"

java - 使用 Jax-Rs 上的注释 Post 发送和不发送文件

Java8集合Replaceall方法错误

Java 8 方法引用不启动线程?