JAVA中List對(duì)象去除重復(fù)值,大致分為兩種情況,一種是List<String>、List<Integer>這類,直接根據(jù)List中的值進(jìn)行去重
List<String> listStr = Arrays.asList("a", "b", "c", "a","a");
List<String> filltrList = listStr.stream().distinct().collect(Collectors.toList());
另一種是List<User>這種,List中存的是javabean對(duì)象,需要根據(jù)List中對(duì)象的某個(gè)值或某幾個(gè)值進(jìn)行比較去重。需要重寫對(duì)象的equals和hashCode
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id;
private String username;
private String sex;
private LocalDate birthday;
private String address;
private String password;
private Integer orgId;
@Override
public boolean equals(Object obj) {
if(this == obj){
return true;//地址相等
}
if(obj == null){
return false;//非空性:對(duì)于任意非空引用x,x.equals(null)應(yīng)該返回false。
}
if(obj instanceof User){
User user = (User) obj;
//需要比較的字段相等,則這兩個(gè)對(duì)象相等
if(this.username.equals(user.getUsername())){
return true;
}
}
return false;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + (username == null ? 0 : username.hashCode());
return result;
}
}
List<User> list = new ArrayList<>();
User u1 = new User();
u1.setId(1);
u1.setUsername("張三");
list.add(u1);
User u2 = new User();
u2.setId(1);
u2.setUsername("張三");
list.add(u2);
User u3 = new User();
u3.setId(1);
u3.setUsername("張三");
list.add(u3);
List<User> collect = list.stream().distinct().collect(Collectors.toList());