一、去除List中重复的String
public class StringDp {
public static void main(String[] args) {
//正常普通写法
List<String> list=new ArrayList<>();
list.add("迪丽热巴");
list.add("古力娜扎");
list.add("马尔扎哈");
list.add("迪丽热巴");
list.add("马尔扎哈");
System.out.println(list);
System.out.println("去重后:"+removeListStringDp(list));
//Java8写法
List<String> stringDpList=list.stream().distinct().collect(Collectors.toList());
System.out.println("JAVA8去重:"+stringDpList);
}
public static List<String> removeListStringDp(List<String> list){
Set<String> set=new LinkedHashSet<>();
set.addAll(list);
list.clear();
list.addAll(set);
return list;
}
}
二、去除List中重复的对象\对象属性
//创建一个Person类,给出构造函数,get,set方法
public class Person {
private String name;
private int age;
private String ho;
.....
.....
.....
//重写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;
return age == person.age &&
Objects.equals(name, person.name) &&
Objects.equals(ho, person.ho);
}
@Override
public int hashCode() {
return Objects.hash(name, age, ho);
}
}
public class ObjectDp {
public static void main(String[] args) {
Person p1=new Person("张三",18,"洗澡");
Person p2=new Person("李四",19,"抽烟");
Person p3=new Person("王五",20,"电影");
Person p4=new Person("张三",18,"洗澡");
Person p5=new Person("王五",18,"洗澡");
//根据对象去重
List<Person> persons= Arrays.asList(p1,p2,p3,p4,p5);
List<Person> personList=new ArrayList<Person>();
persons.stream().forEach(p->{
if (!personList.contains(p)) {
personList.add(p);
}
});
System.out.println("去重前:"+persons);
System.out.println("去重后:"+personList);
//根据对象属性去重
Set<Person> personSet=new TreeSet<Person>((o1, o2) -> o1.getName().compareTo(o2.getName()));
personSet.addAll(persons);
System.out.println("属性(名字)去重后:"+personSet);
//java8根据对象属性去重
List<Person> unique = persons.stream().collect(
collectingAndThen(
toCollection(() -> new TreeSet<>(comparing(Person::getName))),ArrayList::new));
System.out.println("Java8属性去重:"+unique);
}
}
注:去除重复对象是用的contains()方法。出去重复对象属性是用的compareTo()方法。List 的contains()
方法底层实现使用对象的equals方法去比较的,其实重写equals()
就好,但重写了equals最好将hashCode也重写了。