java过滤重复数据_java8根据对象属性过滤掉相同元素

有这样一种情况:某人工资一天涨100块钱,数据库中记录了员工姓名和工资,如:

7b257a2c0a41f72ce49234e10a96f7c3.png

如果此时只需要根据姓名查找员工的其中一条记录该怎么办呢,我们可以用sql语句distinct或groupby达到效果,如果用java集合怎么做呢,如果用java8新特性lambda表达式怎么做呢?

其实说白了,就是过滤掉相同元素的问题,姓名相同的员工视为同一个人,过滤掉其他记录,拿到此人其中一条记录即可

先给出直观效果:

a16623e688c17a87d81d4c94e02d614b.png

为实现此功能,我们可以这样做:

1、新建用户类:

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;

}

}

2、实例化对象,添加到List集合:

List users = Arrays.asList(

new User("张三", 1000),

new User("张三", 1100),

new User("张三", 1200),

new User("李四", 1000),

new User("李四", 1100),

new User("王五", 2500),

new User("赵六", 1800));

3、用传统方式写一个过滤重复元素的方法:

public static List removeDuplicateUser(List users){

Set set = new TreeSet(new Comparator() {

@Override

public int compare(User o1, User o2) {

return o1.getUsername().compareTo(o2.getUsername());

}

});

set.addAll(users);

return new ArrayList<>(set);

}

4、用传统方式写一个打印List集合的方法:

public static void printList(List list){

for (User user : list) {

System.out.println(user.getUsername() + ", " + user.getMoney());

}

System.out.println("-------------------------------");

}

5、测试:

public static void main(String[] args) {

List 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 users2 = removeDuplicateUser(users);

printList(users2);

}

6、运行结果:

6f023cbf4430aabb3974b42ae8e6d852.png

可以看到,用传统遍历方式可以实现功能,而java8新特性增加了lambda表达式和stream流,提供了操作集合的方便操作,下面通过java8新特性简单实现相同功能:

1、过滤方法:

public static List removeDuplicateUser(List users){

Set set = new TreeSet((user1, user2) -> user1.getUsername().compareTo(user2.getUsername()));

set.addAll(users);

return new ArrayList<>(set);

}

2、打印方法:

public static void printList(List list){

list.stream().forEach(user -> System.out.println(user.getUsername() + ", " + user.getMoney()));

System.out.println("-------------------------------");

}

3、测试运行:

8c72e98a807190c18f8d2531b0c6b329.png

效果相同!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值