list.stream().distinct()指定属性进行去重
时间: 2023-10-24 21:23:17 浏览: 97
是的,`list.stream().distinct()`可以对List集合中的元素进行去重操作,如果需要按照对象的某个属性进行去重,可以使用Java8的`distinct()`方法配合Lambda表达式实现。
例如,假设我们有一个Person类,其中有name和age两个属性,现在我们需要按照name属性进行去重,代码如下:
```
List<Person> list = new ArrayList<>();
list.add(new Person("Tom", 20));
list.add(new Person("Jerry", 22));
list.add(new Person("Tom", 21));
list.add(new Person("Jerry", 22));
List<Person> distinctList = list.stream().distinct().collect(Collectors.toList());
List<Person> distinctListByName = list.stream().distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getName))), ArrayList::new));
System.out.println(distinctList); // [Person{name='Tom', age=20}, Person{name='Jerry', age=22}, Person{name='Tom', age=21}]
System.out.println(distinctListByName); // [Person{name='Jerry', age=22}, Person{name='Tom', age=20}]
```
其中,`distinct()`方法可以去除List中的重复元素,但是默认情况下是根据元素的equals方法进行比较的,如果需要按照某个属性进行比较,则需要使用Lambda表达式指定比较方式。
上述代码中,我们使用了两种方式进行去重,第一种方式是直接使用`distinct()`方法进行去重,第二种方式是先通过`toCollection()`方法将List转换成TreeSet,再通过Lambda表达式指定比较方式,最后再将TreeSet转换成List,实现按照name属性进行去重。
阅读全文