先构建一个实体类
public class User {
private Integer ID;
private String name;
private int age;
private String birthday;
public User(Integer ID, String name, int age, String birthday) {
this.ID = ID;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public Integer getID() {
return ID;
}
public void setID(Integer ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"ID=" + ID +
", name='" + name + '\'' +
", age=" + age +
", birthday='" + birthday + '\'' +
'}';
}
}
去重的三种方法:
- 利用HashMap中key的唯一性
- 利用TreeSet的唯一性
- 通过Java8中提供stream方法
public class UniqueElementList {
/**
* 利用HashMap的key去重
*/
public static List<User> handleRepeatByHashMap(List<User> userList){
if(null == userList || userList.size() == 0){
return userList;
}
List<User> newUserList = new ArrayList<>();
Map<String,User> userMap = new HashMap<>();
//将user中的name取出来做key,user做value存到userMap中,
// 因为key是唯一的,所以只能保留一个username(最后一个)
userList.forEach(user -> userMap.put(user.getName(), user));
//然后从userMap中取出value值放回返回数组中
userMap.forEach((s, user) -> newUserList.add(user));
return newUserList;
}
/**
* 利用TreeSet去重(有序,唯一)
*/
public static List<User> handleRepeatByTreeSet(List<User> userList){
if(null != userList && userList.size() > 0){
Set<User> set = new TreeSet<>(new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
//按照名字去重
return o1.getName().compareTo(o2.getName());
}
});
set.addAll(userList);
return new ArrayList<>(set);
}
return userList;
}
/**
* 利用Stream和TreeSet去重
*/
public static List<User> handleRepeatByStream(List<User> userList){
if(null != userList && userList.size() > 0){
return userList.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(
()->new TreeSet<>(Comparator.comparing(User::getName))),ArrayList::new));
}
return userList;
}
}
测试
package ListWork;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
public class TestUniqueElementList {
public static List<User> userList;
static {
User zhangSan = new User(1,"张三",11,"2001-01-02");
User zhangSan2 = new User(2,"张三",12,"2001-01-02");
User wangWu = new User(3,"王五",14,"2003-01-02");
User wangWu2 = new User(4,"王五",18,"2003-01-02");
userList = Arrays.asList(zhangSan,zhangSan2,wangWu,wangWu2);
}
@Test
public void TestHandleRepeatByHashMap(){
UniqueElementList uniqueElementList = new UniqueElementList();
System.out.println("去重前"+userList);
List<User> resUserList = uniqueElementList.handleRepeatByHashMap(userList);
System.out.println("去重后"+resUserList);
// 去重前
// [User{ID=1, name='张三', age=11, birthday='2001-01-02'},
// User{ID=2, name='张三', age=12, birthday='2001-01-02'},
// User{ID=3, name='王五', age=14, birthday='2003-01-02'},
// User{ID=4, name='王五', age=18, birthday='2003-01-02'}]
// 去重后
// [User{ID=2, name='张三', age=12, birthday='2001-01-02'},
// User{ID=4, name='王五', age=18, birthday='2003-01-02'}]
}
@Test
public void TestHandleRepeatByTreeSet(){
UniqueElementList uniqueElementList = new UniqueElementList();
System.out.println("去重前"+userList);
List<User> resUserList = uniqueElementList.handleRepeatByTreeSet(userList);
System.out.println("去重后"+resUserList);
// 去重前
// [User{ID=1, name='张三', age=11, birthday='2001-01-02'},
// User{ID=2, name='张三', age=12, birthday='2001-01-02'},
// User{ID=3, name='王五', age=14, birthday='2003-01-02'},
// User{ID=4, name='王五', age=18, birthday='2003-01-02'}]
// 去重后
// [User{ID=1, name='张三', age=11, birthday='2001-01-02'},
// User{ID=3, name='王五', age=14, birthday='2003-01-02'}]
}
@Test
public void TestHandleRepeatByStream(){
UniqueElementList uniqueElementList = new UniqueElementList();
System.out.println("去重前"+userList);
List<User> resUserList = uniqueElementList.handleRepeatByStream(userList);
System.out.println("去重后"+resUserList);
// 去重前
// [User{ID=1, name='张三', age=11, birthday='2001-01-02'},
// User{ID=2, name='张三', age=12, birthday='2001-01-02'},
// User{ID=3, name='王五', age=14, birthday='2003-01-02'},
// User{ID=4, name='王五', age=18, birthday='2003-01-02'}]
// 去重后
// [User{ID=1, name='张三', age=11, birthday='2001-01-02'},
// User{ID=3, name='王五', age=14, birthday='2003-01-02'}]
}
}