需求描述:有一个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;
}