java stream 两个list对象 匹配字段是否相等
时间: 2023-09-26 17:06:43 浏览: 372
可以使用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 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()方法中指定相应的属性。
java用stream判断两个不同对象的集合长度是否相等,对象中对应字段是否相同,并排除已经比较相同的同的数据
可以使用Java 8 Stream API中的一些操作来实现这个功能。下面是一种可能的实现方式:
假设有两个不同的对象类型A和B,它们都有一个字段value表示它们的值。
首先,可以使用filter操作来排除已经比较相同的数据,可以使用一个HashSet来记录已经比较过的对象,以确保不会重复比较。接下来,可以使用mapToInt操作将A和B对象的集合转换为长度的集合,然后使用allMatch操作来判断长度是否相等。最后,可以使用anyMatch操作来判断对应字段是否相同。
示例代码如下:
```
List<A> listA = ... // A对象的集合
List<B> listB = ... // B对象的集合
Set<A> comparedA = new HashSet<>(); // 已经比较过的A对象
Set<B> comparedB = new HashSet<>(); // 已经比较过的B对象
boolean result = listA.stream()
.filter(a -> !comparedA.contains(a)) // 排除已经比较过的A对象
.flatMap(a -> listB.stream()
.filter(b -> !comparedB.contains(b)) // 排除已经比较过的B对象
.mapToInt(b -> a.value == b.value ? 1 : 0)) // 将A和B对象转换为长度的集合
.allMatch(i -> i == 1); // 判断长度是否相等
if (result) {
// 长度相等,对应字段也都相同
} else {
// 长度不相等或对应字段不相同
}
```
在上述代码中,首先定义了两个HashSet来记录已经比较过的对象。然后使用listA.stream()将A对象的集合转换为Stream,使用filter操作排除已经比较过的A对象,然后使用flatMap操作将A对象和B对象的集合合并为一个Stream。接着使用filter操作排除已经比较过的B对象,然后使用mapToInt操作将A和B对象转换为长度的集合,长度为1表示对应字段相同,长度为0表示对应字段不相同。最后使用allMatch操作判断长度是否相等,anyMatch操作判断对应字段是否相同。
阅读全文
相关推荐














