java8根據對象屬性過濾掉相同元素

有這樣一種狀況:某人工資一天漲100塊錢,數據庫中記錄了員工姓名和工資,如: 若是此時只須要根據姓名查找員工的其中一條記錄該怎麼辦呢,咱們能夠用sql語句distinct或groupby達到效果,若是用java集合怎麼作呢,若是用java8新特性lambda表達式怎麼作呢?java

其實說白了,就是過濾掉相同元素的問題,姓名相同的員工視爲同一我的,過濾掉其餘記錄,拿到此人其中一條記錄便可sql

先給出直觀效果: 數據庫

#爲實現此功能,咱們能夠這樣作: 一、新建用戶類:ide

class User{
    private String username;
    private int money;

    public User(){}

    public User(String username, int money){
        this.username = username;
        this.money = money;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

二、實例化對象,添加到List集合:測試

List<User> users = Arrays.asList(
                new User("張三", 1000),
                new User("張三", 1100),
                new User("張三", 1200),
                new User("李四", 1000),
                new User("李四", 1100),
                new User("王五", 2500),
                new User("趙六", 1800));

三、用傳統方式寫一個過濾重複元素的方法:this

public static List<User> removeDuplicateUser(List<User> users){
        Set<User> set = new TreeSet<User>(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                return o1.getUsername().compareTo(o2.getUsername());
            }
        });

        set.addAll(users);
        return new ArrayList<>(set);
    }

四、用傳統方式寫一個打印List集合的方法:code

public static void printList(List<User> list){
        for (User user : list) {
            System.out.println(user.getUsername() + ", " + user.getMoney());
        }
        System.out.println("-------------------------------");

    }

五、測試:對象

public static void main(String[] args) {
        List<User> users = Arrays.asList(
                new User("張三", 1000),
                new User("張三", 1100),
                new User("張三", 1200),
                new User("李四", 1000),
                new User("李四", 1100),
                new User("王五", 2500),
                new User("趙六", 1800));
        printList(users);
        List<User> users2 = removeDuplicateUser(users);
        printList(users2);

    }

六、運行結果: rem

#能夠看到,用傳統遍歷方式能夠實現功能,而java8新特性增長了lambda表達式和stream流,提供了操做集合的方便操做,下面經過java8新特性簡單實現相同功能:get

一、過濾方法:

public static List<User> removeDuplicateUser(List<User> users){
        Set<User> set = new TreeSet<User>((user1, user2) -> user1.getUsername().compareTo(user2.getUsername()));

        set.addAll(users);
        return new ArrayList<>(set);
    }

二、打印方法:

public static void printList(List<User> list){
        list.stream().forEach(user -> System.out.println(user.getUsername() + ", " + user.getMoney()));
        System.out.println("-------------------------------");
    }

三、測試運行: 效果相同!

相關文章
相關標籤/搜索