有这样一种状况:某人工资一天涨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("-------------------------------"); }
三、测试运行: 效果相同!