背景
有一個list,實體包含多個字段,當其中兩個字段值均相同時,就認為list中的這兩條記錄是一樣的
去重
java8中有一個collectingAndThen可以根據多個字段去重
依據姓名和年齡去重,當姓名和年齡相同時,認為這兩個實體相同
class FlightTicketInfo { private String orderNumber; private String userName; private String age; public FlightTicketInfo(String orderNumber, String userName, String age) { this.orderNumber = orderNumber; this.userName = userName; this.age = age; } @Override public String toString() { return "FlightTicketInfo{" + "orderNumber='" + orderNumber + '\'' + ", userName='" + userName + '\'' + ", age='" + age + '\'' + '}'; } public String getOrderNumber() { return orderNumber; } public String getUserName() { return userName; } public String getAge() { return age; } } @Test public void testList(){ List<FlightTicketInfo> infoList = new ArrayList<>(); infoList.add(new FlightTicketInfo("11111", "xiaoming", "22")); infoList.add(new FlightTicketInfo("22222", "xiaoming", "22")); infoList.add(new FlightTicketInfo("33333", "xiaoming", "23")); infoList.add(new FlightTicketInfo("11111", "xiaoming", "22")); infoList.stream() .collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getUserName()+f.getAge()))), ArrayList::new)) .forEach(System.out::println); }
原文鏈接:https://blog.csdn.net/qq_28988969/article/details/81119587