文章目录
目的: 筛选出两个list中name和color相同的元素执行后的结果match用法介绍
目的: 筛选出两个list中name和color相同的元素
public class TestController {
@Data
static class Car {
private String name
;
private String color
;
}
public static void main(String
[] args
) {
List
<Car> listCar1
= constructCar1();
List
<Car> listCar2
= constructCar2();
System
.out
.println("listCar1的值: " + JSON
.toJSON(listCar1
));
System
.out
.println("listCar2的值" + JSON
.toJSON(listCar2
));
List
<Car> listCarNew1
= new ArrayList<>();
for (Car car1
: listCar1
) {
for (Car car2
: listCar2
) {
if (car1
.getName().equals(car2
.getName()) && car1
.getColor().equals(car2
.getColor())) {
Car car
= new Car();
BeanUtils
.copyProperties(car1
, car
);
listCarNew1
.add(car
);
}
}
}
System
.out
.println("嵌套for循环筛选后的结果" + JSON
.toJSON(listCarNew1
));
List
<Car> listCarNew2
= listCar1
.stream().filter(a
-> listCar2
.stream()
.anyMatch(b
-> a
.getColor().equals(b
.getColor()) && a
.getName().equals(b
.getName())))
.collect(Collectors
.toList());
System
.out
.println("stream操作筛选后的结果" + JSON
.toJSON(listCarNew2
));
}
public static List
<Car> constructCar1() {
List
<Car> listOld
= new ArrayList<>();
Car car1
= new Car();
car1
.setName("A");
car1
.setColor("红");
Car car2
= new Car();
car2
.setName("B");
car2
.setColor("黄");
Car car3
= new Car();
car3
.setName("C");
car3
.setColor("蓝");
Car car4
= new Car();
car4
.setName("D");
car4
.setColor("黑");
listOld
.add(car1
);
listOld
.add(car2
);
listOld
.add(car3
);
listOld
.add(car4
);
return listOld
;
}
public static List
<Car> constructCar2() {
List
<Car> listOld
= new ArrayList<>();
Car car1
= new Car();
car1
.setName("A");
car1
.setColor("红");
Car car2
= new Car();
car2
.setName("B");
car2
.setColor("黄");
Car car3
= new Car();
car3
.setName("E");
car3
.setColor("绿");
listOld
.add(car1
);
listOld
.add(car2
);
listOld
.add(car3
);
return listOld
;
}
}
执行后的结果
listCar1的值: [{"color":"红","name":"A"},{"color":"黄","name":"B"},{"color":"蓝","name":"C"},{"color":"黑","name":"D"}]
listCar2的值[{"color":"红","name":"A"},{"color":"黄","name":"B"},{"color":"绿","name":"E"}]
嵌套for循环筛选后的结果[{"color":"红","name":"A"},{"color":"黄","name":"B"}]
stream操作筛选后的结果[{"color":"红","name":"A"},{"color":"黄","name":"B"}]
match用法介绍
boolean anyMatch(Predicate<? super T> predicate) 只要有一个条件满足即返回true boolean allMatch(Predicate<? super T> predicate) 必须全部都满足才会返回true boolean noneMatch(Predicate<? super T> predicate) 全都不满足才会返回true