1. 程式人生 > >java steam List指定字段去重

java steam List指定字段去重

foreach light ket 實體 list 鏈接 .com tlist num

如:角色去重處理

baseRoleList = baseRoleList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(role -> role.getRoleId()))), ArrayList::new));

原文鏈接:
https://blog.csdn.net/qq_28988969/article/details/81119587

原文內容:

背景

有一個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);
    }

  

java steam List指定字段去重