List中按某个字段,获取该字段最新的记录组成新集合

tech2022-09-29  80

需求描述:有一个car对象,一个car可能有2020,2019,2018等好几个年限,我们要获取List中所有car最新的年限。 数据初始化:

List<Cars> cars = new ArrayList<>(); Cars car1 = new Cars("1","CC7700",10,"2020"); Cars car2 = new Cars("2","GG5588",10,"2021"); Cars car3 = new Cars("3","VV9900",10,"2021"); Cars car4 = new Cars("4","SS9955",10,"2021"); Cars car5 = new Cars("5","CC7700",10,"2021"); Cars car6 = new Cars("6","CC7700",10,"2018"); Cars car7 = new Cars("7","VV9900",10,"2016"); Cars car8 = new Cars("8","GG5588",10,"2016"); Cars car9 = new Cars("9","VV9900",10,"2020"); Cars car10 = new Cars("10","SS9955",10,"2015"); cars.add(car1); cars.add(car2); cars.add(car3); cars.add(car4); cars.add(car5); cars.add(car6); cars.add(car7); cars.add(car8); cars.add(car9); cars.add(car10);

将List按year倒序排序后按name分组转化成Map,我们获取到Map的value第一个就是最新的年限

Map<String, List<Cars>> collect = cars.stream() .sorted(Comparator.comparing(Cars::getYear).reversed()) .collect(Collectors.groupingBy(Cars::getName)); List<Cars> carsList = new ArrayList<>(); for (String key:collect.keySet()){ carsList.add(collect.get(key).get(0)); }

cars对象

@Data @AllArgsConstructor @NoArgsConstructor public class Cars { private String id; private String name; private Integer value; private String year; }
最新回复(0)