【发布时间】:2018-05-16 14:46:12
【问题描述】:
我有两个字符串列表,正在删除这样的重复项:
List<String> list1 = Arrays.asList("1", "2", "3", "4");
List<String> list2 = Arrays.asList("1", "4", "5", "6");
List<String> duplicates = list1.stream().filter(s -> list2.contains(s)).collect(Collectors.toList());
list1.removeAll(duplicates);
list2.removeAll(duplicates);
所以结果是:
list1 = 2, 3
list2 = 5, 6
有没有更好的方法来做到这一点?即用更少的语句。
【问题讨论】:
-
更好在什么方面?更少的比较,更少的内存消耗?
-
定义“更好”。如果您的意思是“渐近时间复杂度”,那么您可以通过 HashSets 做得更好。
-
“更好”可以自以为是。小心你问什么。
-
您想要删除重复项,例如只有唯一的项目,还是想要两组的差异?您现在要删除两个列表中出现的所有项目。对于前者,只需使用 Set。对于后者,这看起来没问题。
-
删除出现在两个列表中的项目。感谢@OliverCharlesworth 提供使用 HashSet 的提示
标签: java lambda collections