java stream 两个list对象 获取匹配字段相等的数据
时间: 2024-02-09 10:09:33 浏览: 36
可以使用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 stream 两个list对象 匹配字段是否相等
可以使用Java8的Stream API,将两个List对象转换为流,然后使用filter和anyMatch方法进行匹配。示例代码如下:
```
List<ObjectA> listA = ... ;
List<ObjectB> listB = ... ;
boolean isMatched = listA.stream()
.filter(a -> listB.stream()
.anyMatch(b -> a.getField().equals(b.getField())))
.findFirst()
.isPresent();
```
其中,ObjectA和ObjectB分别代表两个对象,getField()方法表示需要比较的字段。如果isMatched为true,则表示两个List对象有相同的字段。
java 筛选出两个list中某个字段相同的数据
你可以使用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()方法,否则无法正确比较两个对象是否相等。