package com.itheima.demos;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private int id;
private String name;
}
根据User的name字段进行去重
package com.itheima.demos;
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
User user1 = new User(1, "zhangsan");
User user2 = new User(2, "lisi");
User user3 = new User(3, "wangwu");
User user4 = new User(4, "zhangsan");
List<User> userList = List.of(user1, user2, user3, user4);
// 1. 使用Stream转HashMap进行去重
// (existing, duplicate) -> existing,去重时,保留先出现的
// (existing, duplicate) -> duplicate,去重时,保留后出现的
List<User> distinctList = userList.stream()
.collect(Collectors.toMap(User::getName, user -> user, (existing, duplicate) -> duplicate))
.values()
.stream()
.toList();
distinctList.forEach(System.out::println);
System.out.println("-------------------------------");
// 2. 通过TreeSet进行去重(保存先出现的)
TreeSet<User> treeSet = new TreeSet<>(Comparator.comparing(User::getName));
treeSet.addAll(userList);
treeSet.forEach(System.out::println);
System.out.println("-------------------------------");
// 3. 通过Stream进行去重(保存先出现的)
ArrayList<User> users = userList.stream()
.collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(User::getName))),
ArrayList::new
));
users.forEach(System.out::println);
}
}
结果:
User(id=2, name=lisi)
User(id=4, name=zhangsan)
User(id=3, name=wangwu)
-------------------------------
User(id=2, name=lisi)
User(id=3, name=wangwu)
User(id=1, name=zhangsan)
-------------------------------
User(id=2, name=lisi)
User(id=3, name=wangwu)
User(id=1, name=zhangsan)