list对象数组根据某个属性去重java
时间: 2023-07-02 17:15:07 浏览: 117
你可以使用Java 8中的Stream API来根据某个属性对list对象数组进行去重。具体实现如下:
假设你有一个包含Person对象的List:
```
List<Person> people = Arrays.asList(
new Person("John", 25),
new Person("Bob", 30),
new Person("John", 25),
new Person("Alice", 20)
);
```
如果你想根据Person对象的name属性去重,可以使用以下代码:
```
List<Person> distinctPeople = people.stream()
.filter(distinctByKey(Person::getName))
.collect(Collectors.toList());
```
其中,`distinctByKey`是一个自定义的方法,用于根据某个属性去重:
```
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,其中包含去重后的Person对象:
```
[Person(name=John, age=25), Person(name=Bob, age=30), Person(name=Alice, age=20)]
```
注意:该方法仅适用于Java 8及以上版本。如果你使用的是早期版本的Java,你可以使用传统的方式来实现去重,例如使用HashSet等数据结构来去重。
阅读全文