使用Java Stream过滤具有相同元素的两个列表,以仅获得具有不同元素的列表

k7fdbhmy  于 2023-03-28  发布在  Java
关注(0)|答案(1)|浏览(241)

我有list1list2如下

List<String> list1 = List.of("DX4555", "DY4897", "FG4333", "IH09992");
List<String> list2 = List.of("DX4555", "DY4897", "FG4333", "IH09992", "LJ48833", "YTR3888");

我想要实现的是有一个列表,它只包含list2中的元素,这些元素不在list1中,并且是唯一的,即["LJ48833","YTR3888"]
我想用Java流来实现这个
我试过使用stream().distinct(),但是不起作用。

ecbunoof

ecbunoof1#

stream.distinct()只允许你丢弃那些在同一个集合多次出现的元素,或者当它们被迭代时。
我建议使用apache commons中的ListUtils.subtract,但你也可以使用streams,像这样:

List<String> result = list2.stream()
.filter(item -> !list1.contains(item))
.collect(Collectors.toList());

请注意,这是一个O(n^2)算法,因为List.contains是线性的。如果列表很大,应该用集合替换它们以提高效率。

相关问题