如何用Java Stream筛选list2中不在list1的独有元素?
用Java Stream获取List2独有的元素
要获取list2中不存在于list1的元素,distinct()方法并不适用——它仅用于去除集合内的重复元素,无法筛选两个集合的差集。正确的实现方式是结合filter方法判断元素是否存在于list1,再收集结果。
基础实现(适合小数据量)
直接利用List的contains方法过滤:
List<String> list1 = List.of("DX4555", "DY4897", "FG4333", "IH09992"); List<String> list2 = List.of("DX4555", "DY4897", "FG4333", "IH09992", "LJ48833", "YTR3888"); // Java 16+ 使用toList(),低版本替换为collect(Collectors.toList()) List<String> uniqueInList2 = list2.stream() .filter(element -> !list1.contains(element)) .toList(); // 输出结果:["LJ48833","YTR3888"]
性能优化版(适合大数据量)
List的contains方法时间复杂度为O(n),数据量大时效率偏低。可以先将list1转换为HashSet(其contains方法时间复杂度为O(1)),再执行过滤:
Set<String> list1Set = new HashSet<>(list1); List<String> uniqueInList2 = list2.stream() .filter(element -> !list1Set.contains(element)) .toList();
内容的提问来源于stack exchange,提问作者Emmanuel Njorodongo
相关产品推荐
相关产品推荐

