JAVA 8:如何使用 2 流合并两个列表

Rod*_*dik 0 java list java-stream

你好我写了以下代码

for (Object1 o1 : listObject1) {
  boolean found = false;
  for (Object2 o2 : listObject2) {
    found = o2.getKey().equals(o1.getKey());
    if (found) break;
  }
  if (!found) listObject2.add(new Object2(o1.getKey()));
}
Run Code Online (Sandbox Code Playgroud)

但我想使用流在 Java 8 中编写它。我尝试使用 flatMap 但我没有成功。有人能帮我吗 ?并向我解释 flatmap 的使用?

谢谢

Psh*_*emo 5

如果您的目标是提高可读性,那么您将获得的 IMO 最大收益不是通过流,而是通过缓存第二个列表中元素的键(如果需要,可以通过流完成)

Set<String> keysInList2 = listObject2.stream()
                                     .map(Object2::getKey)
                                     .collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)

如果您可以add从 listObject1 设置对象的另一个键,则意味着该键尚未出现在集合中。在这种情况下,您还应该使用这样的键添加新的 Object2 元素listObject2

for (Object1 o1 : listObject1) {
    if (keysInList2.add(o1.getKey())){
        listObject2.add(new Object2(o1.getKey()));
    }
}
Run Code Online (Sandbox Code Playgroud)