有這樣一種情況:某人工資一天漲100塊錢,數據庫中記錄了員工姓名和工資,如:
如果此時只需要根據姓名查找員工的其中一條記錄該怎么辦呢,我們可以用sql語句distinct或groupby達到效果,如果用java集合怎么做呢,如果用java8新特性lambda表達式怎么做呢?
其實說白了,就是過濾掉相同元素的問題,姓名相同的員工視為同一個人,過濾掉其他記錄,拿到此人其中一條記錄即可
先給出直觀效果:
為實現此功能,我們可以這樣做:
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<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));
3、用傳統方式寫一個過濾重復元素的方法:
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);
}
4、用傳統方式寫一個打印List集合的方法:
public static void printList(List<User> list){
for (User user : list) {
System.out.println(user.getUsername() + ", " + user.getMoney());
}
System.out.println("-------------------------------");
}
5、測試:
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);
}
6、運行結果:
可以看到,用傳統遍歷方式可以實現功能,而java8新特性增加了lambda表達式和stream流,提供了操作集合的方便操作,下面通過java8新特性簡單實現相同功能:
1、過濾方法:
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);
}
2、打印方法:
public static void printList(List<User> list){
list.stream().forEach(user -> System.out.println(user.getUsername() + ", " + user.getMoney()));
System.out.println("-------------------------------");
}
3、測試運行:
效果相同!