java 筛选出两个list中某个字段相同的数据
时间: 2023-08-07 15:04:05 浏览: 425
你可以使用Java 8中的Stream API来筛选出两个list中某个字段相同的数据,具体可以按照以下步骤操作:
1. 定义两个List,假设分别为list1和list2。
2. 使用Stream API的filter()方法过滤出list1中需要比对的字段,假设字段为field1,并将结果存储在一个Set集合中,例如:
```java
Set<String> set1 = list1.stream().map(item -> item.getField1()).collect(Collectors.toSet());
```
3. 使用Stream API的filter()方法过滤出list2中需要比对的字段,假设字段为field2,并将结果存储在一个List集合中,例如:
```java
List<Item> resultList = list2.stream().filter(item -> set1.contains(item.getField2())).collect(Collectors.toList());
```
4. 最终得到的resultList就是两个list中某个字段相同的数据。
需要注意的是,这里的Item类需要重写equals()和hashCode()方法,否则无法正确比较两个对象是否相等。
相关问题
java stream 两个list对象 获取匹配字段相等的数据
可以使用Java 8的Stream API来实现,具体代码如下:
```java
List<Object> list1 = Arrays.asList(obj1, obj2, obj3);
List<Object> list2 = Arrays.asList(obj1, obj4, obj5);
List<Object> result = list1.stream()
.filter(obj -> list2.stream()
.anyMatch(obj2 -> obj2.getField().equals(obj.getField())))
.collect(Collectors.toList());
```
其中,`obj.getField()`表示获取对象的匹配字段,这里假设匹配字段为`field`。`anyMatch`方法表示在`list2`中查找是否有`field`值与`list1`中的对象匹配,如果有则返回`true`,否则返回`false`。`filter`方法则根据`anyMatch`方法的结果筛选出匹配的对象,并返回一个新的List。
java 假设有两个List,分别为list1和list2,需要提取list1中的某一个字段和list2中相同的数据
好的,您可以使用Java中的Stream API来实现。以下是一个示例代码:
```java
// 假设list1和list2中的每个元素都是一个对象,且都有一个名为'id'的字段
List<MyObject> list1 = Arrays.asList(new MyObject(1, "Alice"), new MyObject(2, "Bob"), new MyObject(3, "Charlie"));
List<MyObject> list2 = Arrays.asList(new MyObject(2, 30), new MyObject(4, 25), new MyObject(1, 28));
// 提取list1中的'id'字段和list2中相同的数据
List<Integer> result = list1.stream()
.map(MyObject::getId) // 提取list1中的'id'字段
.filter(id -> list2.stream().anyMatch(obj -> obj.getId() == id)) // 筛选出与list2中相同的数据
.collect(Collectors.toList()); // 将结果存储在List中
System.out.println(result); // 输出结果为 [1, 2]
```
这个代码使用Stream API的map和filter操作来实现,首先使用map操作提取list1中所有元素的'id'字段,然后使用filter操作筛选出与list2中相同的数据,并最终使用collect操作将结果存储在List中。需要注意的是,这里的MyObject类需要具有getId方法来获取'id'字段的值,同时需要自行实现equals和hashCode方法来支持List的contains和anyMatch操作。