@Test
void compareData() {
// 比较两个list对象集合 用stream()方式
List<Dish> aaList = new ArrayList<>();
Dish aaDish = new Dish();
aaDish.setId(1);
aaDish.setName("白菜");
aaList.add(aaDish);
aaDish = new Dish();
aaDish.setId(2);
aaDish.setName("青菜");
aaList.add(aaDish);
List<DishGetData> bbList = new ArrayList<>();
DishGetData bbDish = new DishGetData();
bbDish.setId("2");
bbDish.setName("青菜");
bbList.add(bbDish);
bbDish = new DishGetData();
bbDish.setId("3");
bbDish.setName("波菜");
bbList.add(bbDish);
// 返回以aaList为主,两个集合中id和名称都相同的菜
List<Dish> temp1 = aaList.stream().filter(a -> bbList.stream().anyMatch(b ->
a.getId().toString().equals(b.getId()) &&a.getName().equals(b.getName())))
.collect(Collectors.toList());
temp1.forEach(item -> {
System.out.println("相同的菜: " + item.getName());
// 输出 相同的菜: 青菜
});
// 返回以aaList为主,两个集合中id和名称都相同以外所有的菜
// 名称和id相同的不返回,不相同的返回
List<Dish> temp2 = aaList.stream().filter(a -> bbList.stream().noneMatch(b ->
a.getId().toString().equals(b.getId()) && a.getName().equals(b.getName())))
.collect(Collectors.toList());
temp2.forEach(item -> {
System.out.println("不同的菜: " + item.getName());
// 输出 不同的菜: 白菜
});
// 返回以bbList为主,两个集合中id和名称都相同以外所有的菜
//名称和id相同的不返回,不相同的返回
List<DishGetData> temp3 = bbList.stream().filter(a -> aaList.stream()
.noneMatch(b -> a.getId().equals(b.getId().toString()) &&
a.getName().equals(b.getName()))).collect(Collectors.toList());
temp3.forEach(item -> {
System.out.println("不同的菜: " + item.getName());
// 输出 不同的菜: 波菜
});
}
两个List对象集合比较
于 2024-04-09 14:26:12 首次发布