stream过滤重复对象
时间: 2023-11-22 09:33:17 浏览: 28
你可以使用Java 8中的流(Stream)和distinct()方法来过滤重复对象。例如,假设你有一个列表List<Person>,它包含多个Person对象,你想要过滤掉重复的Person对象。你可以使用以下代码:
List<Person> personList = new ArrayList<>();
// 添加Person对象到personList
List<Person> distinctPersons = personList.stream()
.distinct()
.collect(Collectors.toList());
这样就能得到一个包含不重复Person对象的新列表distinctPersons。注意,为了使distinct()方法正常工作,你需要确保Person类已经正确实现了equals()和hashCode()方法。
相关问题
java stream 提取list对象重复数据
可以使用Java 8的Stream API来提取List中的重复对象。使用`distinct()`方法可以过滤掉List中重复的元素,而使用`filter()`方法可以过滤掉不重复的元素,最后使用`collect()`方法将结果收集到一个新的List中。以下是示例代码:
```
List<Person> duplicates = people.stream()
.filter(p -> Collections.frequency(people, p) > 1)
.distinct()
.collect(Collectors.toList());
System.out.println("Duplicates: " + duplicates);
```
这里的`Collections.frequency()`方法可以计算List中某个元素出现的次数,如果大于1则表示该元素重复。`distinct()`方法用于过滤掉List中的重复元素。最后我们使用`collect()`方法将结果收集到一个新的List中。
输出结果为:`Duplicates: [Person{id=1, name='Alice'}, Person{id=3, name='Charlie'}]`。
java 过滤list不重复对象数据
可以使用Java 8的Stream API来过滤List中不重复的对象数据。假设有一个名为Person的类,其中包含id和name两个属性,现在需要过滤List<Person>中不重复的Person对象数据,可以这样实现:
```java
List<Person> personList = ... // 原始List
List<Person> distinctList = personList.stream()
.collect(Collectors.collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Person::getId))),
ArrayList::new
));
```
上述代码中,使用Stream的collect方法进行聚合操作,其中Collectors.toCollection方法接收一个Supplier参数,返回一个新的集合对象(这里使用TreeSet来保证Person的id不重复),然后将聚合结果转换为ArrayList对象返回。这样就可以得到一个不含重复Person对象的List了。