List去重
非对象(String)
Stream
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("云");
list.add("云");
list.add("222");
List<String> collect = list.stream().distinct().collect(Collectors.toList());
collect.forEach(System.out::println);
}
运行结果:
set
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("111");
list.add("222");
list.add("云");
list.add("云");
list.add("222");
List<String> newList = new ArrayList<>(new TreeSet<>(list));
newList.forEach(System.out::println);
}
运行结果:
对象(Object)
set去重
public static void main(String[] args) {
new Test().distinctList();
}
public void distinctList(){
List<Student> list = new ArrayList<>();
Student student = new Student();
student.setName("孙悟空");
student.setAge(12);
student.setSex("男");
list.add(student);
student = new Student();
student.setName("孙悟空");
student.setAge(15);
student.setSex("男");
list.add(student);
student = new Student();
student.setName("孙悟空");
student.setAge(12);
student.setSex("男");
list.add(student);
// 使用name 去重
TreeSet<Student> students = new TreeSet<>(Comparator.comparing(Student::getName));
// 多个
// TreeSet<Student> students = new TreeSet<>(Comparator.comparing(item->item.getName()+";"+item.getAge()));
// 结果
//Test.Student(name=孙悟空, age=12, sex=男)
//Test.Student(name=孙悟空, age=15, sex=男)
students.addAll(list);
list = new ArrayList<>(students);
list.forEach(System.out::println);
}
@Data
class Student {
private String name;
private Integer age;
private String sex;
}
stream 去重对象
思想其实和上一个一样就是写法装逼一点 核心还是set
public static void main(String[] args) {
new Test().distinctList();
}
public void distinctList() {
List<Student> list = new ArrayList<>();
Student student = new Student();
student.setName("孙悟空");
student.setAge(12);
student.setSex("男");
list.add(student);
student = new Student();
student.setName("孙悟空");
student.setAge(15);
student.setSex("男");
list.add(student);
student = new Student();
student.setName("孙悟空");
student.setAge(12);
student.setSex("男");
list.add(student);
// 单个name
// list = list.stream().collect(
// Collectors.collectingAndThen(
// Collectors.toCollection(() -> new TreeSet<>(
// Comparator.comparing(Student::getName))), ArrayList::new));
// 执行结果
// Test.Student(name=孙悟空, age=12, sex=男)
// 连个或两个以上
list = list.stream().collect(
Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(
Comparator.comparing(item -> item.getName() + ";" + item.getAge()))), ArrayList::new));
//执行结果
//Test.Student(name=孙悟空, age=12, sex=男)
//Test.Student(name=孙悟空, age=15, sex=男)
list.forEach(System.out::println);
}
@Data
class Student {
private String name;
private Integer age;
private String sex;
}