java8中List根據某一字段去重


實體類:

package test;

public class User {
    private String userid;
    private String username;
    private String age;
    private String address;
    
    public User(String userid, String username, String age, String address) {
        super();
        this.userid = userid;
        this.username = username;
        this.age = age;
        this.address = address;
    }
    
    public String getUserid() {
        return userid;
    }
    public void setUserid(String userid) {
        this.userid = userid;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
    @Override
    public String toString() {
        return "User [userid=" + userid + ", username=" + username + ", age=" + age + ", address=" + address + "]";
    }
}

測試:

package test;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.TreeSet;
import java.util.stream.Collectors;

public class Test1 {

    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        
        userList.add(new User("1","李大錘","23","南京"));
        userList.add(new User("2","張無忌","18","西安"));
        userList.add(new User("3","劉德華","26","蘇州"));
        userList.add(new User("4","郭靖","33","上海"));
        
        userList.add(new User("1","李大錘","23","南京"));    //id相同,其他數據也相同
        userList.add(new User("3","帶頭大哥","36","杭州"));  //id相同,其他數據不同
        
        System.out.println(userList);
        //根據userid去重
        userList = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User :: getUserid))), ArrayList::new));
        System.out.println(userList);
    }
}

測試結果:

[User [userid=1, username=李大錘, age=23, address=南京], User [userid=2, username=張無忌, age=18, address=西安], User [userid=3, username=劉德華, age=26, address=蘇州], User [userid=4, username=郭靖, age=33, address=上海], User [userid=1, username=李大錘, age=23, address=南京], User [userid=3, username=帶頭大哥, age=36, address=杭州]]
[User [userid=1, username=李大錘, age=23, address=南京], User [userid=2, username=張無忌, age=18, address=西安], User [userid=3, username=劉德華, age=26, address=蘇州], User [userid=4, username=郭靖, age=33, address=上海]]

可以看出,此操作把后面的兩個id相同的都給剔除了。若兩個id一樣,其他數據不同的話,留下的數據是靠前的數據,剔除的是靠后的數據。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM