目录
一、去除List中重复的String
1、借助 Set 的特性进行去重
2、利用set集合特性保持顺序一致去重
3、遍历List集合,将元素添加到另一个List集合中
4、使用Java8特性去重
二、List中对象去重
三、根据对象的属性去重
一、去除List中重复的String
1、借助 Set 的特性进行去重
public static List list distinct(List list) {
final boolean sta = null != list && list.size() > 0;
List doubleList= new ArrayList();
if (sta) {
Set set = new HashSet();
set.addAll(list);
doubleList.addAll(set);
}
return doubleList;
}
2、利用set集合特性保持顺序一致去重
public static void delRepeat(List list) {
//方法一
List listNew = new ArrayList(new TreeSet(list));
//方法二
List listNew2 = new ArrayList(new linkedHashSet(list));
}
3、遍历List集合,将元素添加到另一个List集合中
// 遍历后判断赋给另一个list集合,保持原来顺序
public static List delRepeat(List list) {
List listNew = new ArrayList();
for (String str : list) {
if (!listNew.contains(str)) {
listNew.add(str);
}
}
return listNew ;
}
4、使用Java8特性去重
List unique = list.stream().distinct().collect(Collectors.toList());
二、List中对象去重
public static List list distinct(List list) {
final boolean sta = null != list && list.size() > 0;
List doubleList= new ArrayList();
if (sta) {
Set set = new HashSet();
set.addAll(list);
doubleList.addAll(set);
}
return doubleList;
}
2、利用set集合特性保持顺序一致去重
public static void delRepeat(List list) {
//方法一
List listNew = new ArrayList(new TreeSet(list));
//方法二
List listNew2 = new ArrayList(new linkedHashSet(list));
}
3、遍历List集合,将元素添加到另一个List集合中
// 遍历后判断赋给另一个list集合,保持原来顺序
public static List delRepeat(List list) {
List listNew = new ArrayList();
for (String str : list) {
if (!listNew.contains(str)) {
listNew.add(str);
}
}
return listNew ;
}
4、使用Java8特性去重
List unique = list.stream().distinct().collect(Collectors.toList());
二、List中对象去重
// 遍历后判断赋给另一个list集合,保持原来顺序
public static List delRepeat(List list) {
List listNew = new ArrayList();
for (String str : list) {
if (!listNew.contains(str)) {
listNew.add(str);
}
}
return listNew ;
}
4、使用Java8特性去重
List unique = list.stream().distinct().collect(Collectors.toList());
二、List中对象去重
例如 Person类
public class Person {
private Long id;
private String name;
public Person(Long id, String name) {
this.id = id;
this.name = name;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + ''' +
'}';
}
}
重写Person对象的equals()方法和hashCode()方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (!id.equals(person.id)) return false;
return name.equals(person.name);
}
@Override
public int hashCode() {
int result = id.hashCode();
result = 31 * result + name.hashCode();
return result;
}
下面对象去重的代码:
Person p1 = new Person(1l, "name1");
Person p2 = new Person(3l, "name2");
Person p3 = new Person(2l, "name3");
Person p4 = new Person(4l, "name4");
Person p5 = new Person(5l, "name5");
List persons = Arrays.asList(p1, p2, p3, p4, p5, p5, p1, p2, p2);
List personList = new ArrayList<>();
// 去重
persons.stream().forEach(
p -> {
if (!personList.contains(p)) {
personList.add(p);
}
}
);
System.out.println(personList);
List 的 contains() 方法底层实现使用对象的 equals 方法去比较的,其实重写 equals() 就好,但重写了 equals 最好将 hashCode 也重写了。
三、根据对象的属性去重
根据对象的id去重
public static ListremoveDupliById(List ps) { Set personSet = new TreeSet<>((o1, o2) -> o1.getUserid().compareTo(o2.getUserid())); personSet.addAll(ps); return new ArrayList<>(personSet); }
public static ArrayListremoveDuplicteUsers(List courseUserList) { Set userset = new TreeSet (new Comparator () { @Override public int compare(CourseUser o1, CourseUser o2) { return o1.getUserid().compareTo(o2.getUserid()); } }); userset.addAll(courseUserList); return new ArrayList (userset); }
java 8
public staticPredicate distinctByKey(Function super T, Object> keyExtractor) { Map
自定义拉姆塔表达式:
Listcollect = CourseUsers.stream().filter(distinctByKey(CourseUser::getUserid)).collect(Collectors.toList()); System.out.println(JSONObject.toJSonString(collect)); public static Predicate distinctByKey(Function super T, Object> keyExtractor) { Map
参考:去掉重复对象-java8_jiaobuchong的专栏-CSDN博客_list



