java8 .stream().filter() 代替嵌套for循环 lambda表达式

tech2025-05-19  13

文章目录

目的: 筛选出两个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)); //嵌套for循环操作 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)); //java 8 stream操作 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

最新回复(0)