我需要使用java 8功能找到两个字符串Array列表之间的区别。 目前我正在这样做
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);
任何人都可以为同一件事建议更清洁,更短的代码吗?我觉得可以用其他更简单的方式完成。
答案 0 :(得分:3)
您可以使用以下代码执行相同的操作:
List<String> result = b.stream()
.filter(not(new HashSet<>(a)::contains))
.collect(Collectors.toList());
private static <T> Predicate<T> not(Predicate<T> predicate) {
return predicate.negate();
}
希望它有所帮助。