两个List某个字段的差集
时间: 2023-08-20 21:07:31 浏览: 51
假设你有两个List,每个List中都有一个对象,对象中都有一个字段,我们可以通过Java8 Stream的方式来获取两个List某个字段的差集,具体实现如下:
```java
// 定义两个List
List<MyObject> list1 = new ArrayList<>();
List<MyObject> list2 = new ArrayList<>();
// MyObject对象中有一个字段为id
// 获取list1中id与list2中id不同的元素集合
List<MyObject> diffList = list1.stream()
.filter(item -> list2.stream().noneMatch(item2 -> item2.getId().equals(item.getId())))
.collect(Collectors.toList());
```
这里使用了 `stream` 方法将List转换为Stream,然后使用 `filter` 方法过滤出id不同的元素,最后使用 `collect` 方法将结果集合转换为List。
相关问题
java stream流 两个相同字段的list取差集
在Java中,你可以使用Stream流来获取两个具有相同字段的列表的差集。首先,将两个列表转换为流,然后使用filter操作符和anyMatch方法来过滤出在第一个列表中存在但在第二个列表中不存在的元素。下面是一个示例代码:
```java
import java.util.ArrayList;
import java.util.List;
class Main {
public static void main(String[] args) {
List<Integer> list1 = new ArrayList<>();
list1.add(1);
list1.add(2);
list1.add(3);
list1.add(4);
list1.add(5);
List<Integer> list2 = new ArrayList<>();
list2.add(4);
list2.add(5);
list2.add(6);
list2.add(7);
list2.add(8);
List<Integer> difference = list1.stream()
.filter(element -> !list2.contains(element))
.toList();
System.out.println(difference);
}
}
```
这段代码将输出 `[1, 2, 3]`,即两个列表的差集。请注意,这里使用了Java 8引入的toList()方法来将流转换为列表。如果你使用的是较早版本的Java,你可以使用collect(Collectors.toList())来实现相同的功能。同样地,如果你的列表中包含复杂的对象而不仅仅是整数,你可能需要使用适当的字段来进行过滤操作。
用两个字段对比两个list
你可以使用Python的set()函数将两个list转换为集合(set),然后使用集合运算来比较它们的差异。例如:
```python
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
set1 = set(list1)
set2 = set(list2)
# 找出list1中有,但list2中没有的元素
print(set1 - set2)
# 找出list2中有,但list1中没有的元素
print(set2 - set1)
# 找出list1和list2中都有的元素
print(set1 & set2)
```
输出结果为:
```python
{1, 2}
{6, 7}
{3, 4, 5}
```
这里用到了集合运算符“-”表示差集,“&”表示交集。