java8 lamda集合 根据对象的属性去重
时间: 2023-08-11 19:03:17 浏览: 93
lamda表达式 part3
在Java 8中,可以使用Lambda表达式和Stream API实现根据对象属性去重的操作。
假设我们有一个Person类,其中包含属性name和age,我们需要根据name属性去重,可以按照以下步骤进行操作:
1. 创建一个List<Person>对象,包含多个Person对象,例如:
```
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 22));
personList.add(new Person("Alice", 18));
```
2. 使用Stream API调用distinct()方法,并传入一个Lambda表达式,以根据name属性去重,例如:
```
List<Person> distinctList = personList.stream()
.filter(distinctByKey(Person::getName))
.collect(Collectors.toList());
```
3. 在distinctByKey()方法中,使用一个Map对象来存储已经出现过的name值,实现去重操作,例如:
```
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
这样,我们就可以根据对象的属性去重,得到一个去重后的List对象。
阅读全文