java - java - 如何使用java 8 Streams找到两个String ArrayList之间的区别?
问题描述
我需要使用 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);
任何人都可以为同一件事建议一个更简洁、更短的代码吗?我觉得它可以通过其他更简单的方式来完成。
解决方案
您可以使用以下代码执行相同的操作:
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();
}
希望能帮助到你。
推荐阅读
- java - BasicJavaAlgorithm_BiggieSize
- r - Mac终端和r显示不同的gdal版本
- python - 使用 python 从 .txt 文件中提取信息,并按客户和产品汇总数字
- clang - 铸造`[
x i8]*` 到 `i8 *` - shell - 从ubuntu中的csv中删除重复的列
- c++ - 无法让 SDL2 在 Windows 10 上与 MinGW、VSCode 和 CMake 一起使用
- powershell - 在应用程序崩溃的信息亭模式下停止重启循环
- javascript - 如何知道lightbox2是否已加载或关闭
- php - 如何更改下拉菜单以在单击而不是悬停时打开?
- r - 在R中cbind tibble和matrix时不一致