javalist集合中对象按属性去重
时间: 2023-11-16 22:07:07 浏览: 42
可以使用Java8的Stream API,先将List转化为Stream,再使用distinct()方法进行去重,最后将Stream转化为List即可。具体实现可以参考以下代码:
```
List<Object> distinctList = list.stream().distinct().collect(Collectors.toList());
```
其中,需要在对象的类中重写equals()和hashCode()方法,以便正确地比较对象是否相等。
相关问题
java8集合中的对象根据属性去重
在Java8中,可以使用Stream API来对集合中的对象根据属性进行去重。可以使用 `Collectors.toMap` 方法将对象的属性作为键,对象本身作为值,然后使用 `Function.identity()` 方法获取对象本身。如果存在重复的键,则使用 `BinaryOperator` 自定义合并逻辑,例如选择保留第一个或最后一个对象。例如,假设有一个 `Person` 类,其中包含 `id` 和 `name` 两个属性,现在需要根据 `id` 属性进行去重,代码如下:
```java
List<Person> persons = Arrays.asList(new Person(1, "Tom"),
new Person(2, "Jerry"),
new Person(3, "Mike"),
new Person(2, "Lucy"),
new Person(4, "John"),
new Person(1, "Bob"));
List<Person> result = new ArrayList<>(persons.stream()
.collect(Collectors.toMap(Person::getId, Function.identity(), (person1, person2) -> person1))
.values());
result.forEach(person -> System.out.println(person.getId() + " : " + person.getName()));
```
运行结果如下:
```
1 : Tom
2 : Jerry
3 : Mike
4 : John
```
其中,首先使用 `Collectors.toMap` 方法将对象的 `id` 属性作为键,对象本身作为值,然后使用 `(person1, person2) -> person1` 自定义合并逻辑,选择保留第一个对象。最后使用 `values()` 方法获取去重后的对象集合,并输出结果。
java8 lamda集合 根据对象的属性去重
在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对象。