通过stream流获取两个集合中相同的元素
注意:如果只想比较对象的某一个属性值,那么一定要重写equals方法
public class TestDemo {
public static void main(String[] args) {
// 创建集合1
List<Student> studentList1 = new ArrayList<>();
studentList1.add(new Student("刘德华", 23));
studentList1.add(new Student("张学友", 24));
studentList1.add(new Student("郭富城", 25));
// 创建集合2
List<Student> studentList2 = new ArrayList<>();
studentList2.add(new Student("刘德华", 23));
studentList2.add(new Student("黎明", 24));
studentList2.add(new Student("郭富城", 25));
// 取两个集合的交集
List<Student> resultList = studentList1.stream().filter(studentList2::contains).collect(Collectors.toList());
System.out.println(resultList);
}
}
@Data
@AllArgsConstructor
class Student {
private String name;
private Integer age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
通过stream去重集合中重复的元素
注意:如果只想比较对象的某一个属性值,那么一定要重写equals方法
public class TestDemo {
public static void main(String[] args) {
// 创建集合
List<Student> studentList= new ArrayList<>();
studentList.add(new Student("刘德华", 23));
studentList.add(new Student("张学友", 24));
studentList.add(new Student("刘德华", 23));
studentList.add(new Student("刘德华", 25));
// 去重
List<Student> resultList = studentList.stream().distinct().collect(Collectors.toList());
System.out.println(resultList);
}
}
@Data
@AllArgsConstructor
class Student {
private String name;
private Integer age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
return Objects.equals(name, student.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
}
通过stream去重集合中重复的元素,根据对象里某一个属性字段去重(这种方法不需要重写equals方法)
public class TestDemo {
public static void main(String[] args) {
// 创建集合
List<Student> studentList = new ArrayList<>();
studentList.add(new Student("刘德华", 23));
studentList.add(new Student("张学友", 24));
studentList.add(new Student("刘德华", 23));
studentList.add(new Student("刘德华", 25));
// 根据姓名去重
List<Student> resultList = studentList.stream()
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Student::getName))), ArrayList::new));
System.out.println(resultList);
}
}