java stream 两个list对象 匹配字段是否相等
时间: 2023-09-26 18:06:43 浏览: 135
可以使用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 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 stream 2个list中某个字段比较
可以使用Java 8中的Stream API来比较两个List中某个字段的值。
假设有两个List,每个List中都包含一个Person对象,Person对象有一个名字属性。我们可以使用Stream API将两个List中的Person对象按名字进行比较。
代码示例:
```
List<Person> list1 = new ArrayList<>();
list1.add(new Person("Alice"));
list1.add(new Person("Bob"));
list1.add(new Person("Charlie"));
List<Person> list2 = new ArrayList<>();
list2.add(new Person("Bob"));
list2.add(new Person("Charlie"));
list2.add(new Person("David"));
List<String> names1 = list1.stream().map(Person::getName).collect(Collectors.toList());
List<String> names2 = list2.stream().map(Person::getName).collect(Collectors.toList());
names1.retainAll(names2);
System.out.println("共同的名字:" + names1);
```
在上面的代码中,我们首先使用Stream API将每个List中的Person对象的名字提取出来,然后使用retainAll()方法比较两个List中的名字是否相同,最后输出共同的名字。
输出结果:
```
共同的名字:[Bob, Charlie]
```
注意,这里我们只比较了名字是否相同,如果需要比较其他属性,可以在map()方法中指定相应的属性。