java8写一个List<B>中几个字段的值与List<B>中不一致时,取出不一致的List<B>的共通方法
时间: 2024-05-05 22:17:27 浏览: 92
java8从list集合中取出某一属性的值的集合案例
5星 · 资源好评率100%
可以使用Java 8的Lambda表达式和Stream API来实现取出不一致的List<B>的共通方法。
假设List<B>中的B类有两个字段a和b,需要比较它们的值。可以按照以下步骤实现:
1. 使用Stream API的filter方法过滤出不一致的B对象,即a或b字段的值不一致的B对象。
2. 使用Stream API的map方法将过滤出的B对象转换为它们的ID(假设B类中有一个ID字段)。
3. 使用Stream API的collect方法将ID转换为List<B>。
下面是示例代码:
```
List<B> list1 = ...; //第一个List<B>
List<B> list2 = ...; //第二个List<B>
List<B> diffList = list1.stream()
.filter(b -> {
Optional<B> optB = list2.stream()
.filter(b2 -> b2.getId().equals(b.getId()))
.findFirst();
if (optB.isPresent()) {
B b2 = optB.get();
return !b2.getA().equals(b.getA()) || !b2.getB().equals(b.getB());
} else {
return true;
}
})
.collect(Collectors.toList());
```
这段代码首先使用Stream API的filter方法过滤出不一致的B对象,即a或b字段的值不一致的B对象。在filter方法中,使用了Stream API的findFirst方法查找list2中与当前B对象ID相同的B对象,如果找到了,则比较它们的a和b字段的值是否相同,如果不相同则返回true,表示当前B对象与list2中的B对象不一致;如果没有找到,则返回true,表示当前B对象在list2中不存在,也是不一致的。
接着,使用Stream API的map方法将过滤出的B对象转换为它们的ID。这里假设B类中有一个ID字段。
最后,使用Stream API的collect方法将ID转换为List<B>。
阅读全文