在Java8中,提供了非常方便的方法对集合进行去重
1. 对List String 进行去重
public static void main(String[] args) {
List<String> stringList = new ArrayList<>();
stringList.add("test1");
stringList.add("test1");
stringList.add("test2");
stringList.add("test2");
stringList.add("test3");
stringList = stringList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(String::toString))), ArrayList::new));
stringList.forEach(System.out::println);
}
结果为:
2. 对List Object 进行去重
Object类:
public class Student {
private String name;
private int age;
public Student(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
去重测试(通过姓名去重):
public static void main(String[] args) {
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("小明", 12));
studentList.add(new Student("小明", 12));
studentList.add(new Student("小华", 13));
studentList.add(new Student("小华", 13));
studentList.add(new Student("小王", 15));
studentList = studentList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new));
studentList.forEach(System.out::println);
}
结果:
3. 对List Map 去重 (对Map中的某个key对应的值进行去重)
public static void main(String[] args) {
List<Map<String, Object>> mapList = new ArrayList<>();
Map<String, Object> map1 = new HashMap<>();
map1.put("id", "val1");
map1.put("name", "小明");
Map<String, Object> map2 = new HashMap<>();
map2.put("id", "val1");
map2.put("name", "小王");
Map<String, Object> map3 = new HashMap<>();
map3.put("id", "val2");
map3.put("name", "小华");
Map<String, Object> map4 = new HashMap<>();
map4.put("id", "val2");
map4.put("name", "小张");
Map<String, Object> map5 = new HashMap<>();
map5.put("id", "val3");
map5.put("name", "小美");
mapList.add(map1);
mapList.add(map2);
mapList.add(map3);
mapList.add(map4);
mapList.add(map5);
mapList = mapList.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(
() -> new TreeSet<>(Comparator.comparing(m -> (String) m.get("id")))), ArrayList::new));
mapList.forEach(System.out::println);
}
结果:
结束
以上就是对List三种类型的去重方式,熟练的运用Java8语法可以是我们的代码更加简洁。有什么问题欢迎与我讨论!