如何使用Java Stream从Car列表中筛选指定品牌的车辆?
筛选指定品牌的Car对象列表(Java Stream实现)
要筛选出品牌为指定值的Car对象列表,核心是在Stream流水线中加入filter()操作,它会根据你指定的条件保留符合要求的元素。
基础实现(筛选Mazda品牌)
直接使用filter()结合Lambda表达式判断车辆品牌:
List<Car> mazdaCars = cars.stream() // 用字符串常量调用equals避免空指针异常(若getMake()返回null时不会报错) .filter(car -> "Mazda".equals(car.getMake())) .collect(Collectors.toList());
这里的filter()接收一个Predicate(断言),只有当Lambda表达式返回true的Car对象才会被保留到后续的流中,最后通过collect()收集成列表。
可复用的通用筛选方法
如果需要支持动态指定品牌参数,可以封装成一个通用方法:
public List<Car> filterCarsByMake(List<Car> cars, String targetMake) { return cars.stream() // 先判断目标品牌不为null,再匹配车辆品牌 .filter(car -> targetMake != null && targetMake.equals(car.getMake())) .collect(Collectors.toList()); }
调用时只需传入目标品牌即可:
List<Car> mazdaCars = filterCarsByMake(cars, "Mazda");
补充说明
- 区别于你之前用的
map():map()是用来转换流中元素的类型(比如把Car转成String类型的品牌),而filter()是用来筛选保留符合条件的原元素(这里就是完整的Car对象)。 - 空值处理:使用
"Mazda".equals(car.getMake())而非car.getMake().equals("Mazda"),是为了避免当car.getMake()返回null时抛出NullPointerException。
内容的提问来源于stack exchange,提问作者pralxx
相关产品推荐
相关产品推荐

