【发布时间】:2018-06-09 07:48:01
【问题描述】:
我需要使用 java 8 features 找到两个字符串数组列表之间的区别。 目前我正在这样做
final List<String> a = new ArrayList<>();
a.add("1");
a.add("2");
a.add("3");
final List<String> b = new ArrayList<>();
b.add("1");
b.add("2");
b.add("4");
final List<String> result = a.stream().filter((s) -> b.stream().noneMatch(s::equals))
.collect(Collectors.toList());
final List<String> result2 = b.stream().filter((s) -> a.stream().noneMatch(s::equals))
.collect(Collectors.toList());
System.out.println(result);
System.out.println(result2);
final List<String> FinalResult = java.util.stream.Stream.concat(result.stream(), result2.stream())
.distinct()
.collect(Collectors.toList());
System.out.println(FinalResult);
任何人都可以为同一件事提出更简洁和更短的代码吗?我觉得它可以通过其他更简单的方式来完成。
【问题讨论】:
-
集合中的元素是否允许重复?
-
你可以做类似
Stream.concat(a.stream(), b.stream()).filter(s -> a.contains(s) != b.contains(s)).collect(Collectors.toList()); -
@TalOhana 谢谢你的帮助
-
@TalOhana 是否要求 m 将过滤器内的 a 和 b 设为 final 。为什么需要它?我不愿意让它成为最终的
标签: java arrays arraylist collections java-8