java 对list对象里面某个属性去重示例
时间: 2023-08-20 08:05:11 浏览: 125
可以使用 Java 8 的 Stream API 来实现对 List 对象里面某个属性去重。假设有一个 Person 类,其中包含 name 和 age 两个属性,现在要对 List<Person> 中的 name 属性进行去重,可以按照如下方式实现:
```java
List<Person> persons = new ArrayList<>();
// 添加一些 Person 对象到 persons 列表中
List<String> distinctNames = persons.stream().map(Person::getName).distinct().collect(Collectors.toList());
```
上述代码中,首先使用 `map` 方法将 Person 对象转换为 name 属性,然后使用 `distinct` 方法去重,最后使用 `collect` 方法将去重后的结果转换为一个 List<String> 对象,即 distinctNames。
如果要对 List<Person> 中的其他属性去重,只需要将 `map` 方法中的 `Person::getName` 替换为对应的属性访问方法即可。
相关问题
java8 list对象按某个字段去重
### Java 8 中基于字段对 List 对象去重
在 Java 8 中,可以利用 `Stream` API 和自定义逻辑实现按特定字段对列表对象进行去重操作。以下是具体方法:
可以通过组合 `Collectors.toMap()` 或者 `distinctByKey()` 的方式完成此功能。下面是一个完整的例子,展示如何基于某个字段去除重复项。
#### 示例代码
假设有一个类 `Person` 定义如下:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Person{name='" + name + "', age=" + age + "}";
}
}
```
如果要按照 `name` 字段去重,则可以使用以下代码片段:
```java
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Person> people = Arrays.asList(
new Person("Alice", 30),
new Person("Bob", 25),
new Person("Alice", 22), // Duplicate based on 'name'
new Person("Charlie", 35)
);
List<Person> distinctByName = people.stream()
.collect(Collectors.collectingAndThen(
Collectors.toMap(
Person::getName,
person -> person,
(existing, replacement) -> existing // Keep first occurrence
),
map -> new ArrayList<>(map.values())
));
System.out.println(distinctByName);
}
}
```
上述代码的核心在于使用了 `toMap()` 方法[^1],其中第三个参数 `(existing, replacement) -> existing` 表示当遇到键冲突时保留第一个出现的对象。
另一种更通用的方式是创建一个辅助函数用于移除指定字段上的重复数据:
```java
public static <T> Predicate<T> distinctByKeys(Function<? super T, ?>... keyExtractors) {
Set<List<?>> seen = ConcurrentHashMap.newKeySet();
return t -> {
List<?> keys = Arrays.stream(keyExtractors).map(ke -> ke.apply(t)).toList();
return seen.add(keys); // Returns true if added successfully.
};
}
// 使用该工具方法
people.stream().filter(distinctByKeys(Person::getName)).forEach(System.out::println);
```
这种方法更加灵活,支持多字段联合判断唯一性。
#### 总结
以上两种方案均能有效解决基于单个或多个字段的去重需求。第一种适合简单场景下的快速实现;第二种则提供了更高的扩展性和可读性。
java 对list对象进行去重示例
可以使用 Java 8 的 Stream API 来对 List 对象进行去重。假设有一个 List<String> 对象,现在要对其中的元素进行去重,可以按照如下方式实现:
```java
List<String> list = new ArrayList<>();
// 添加一些元素到 list 列表中
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
```
上述代码中,首先使用 `distinct` 方法去重,然后使用 `collect` 方法将去重后的结果转换为一个 List<String> 对象,即 distinctList。如果要对 List 中的自定义对象进行去重,可以使用对象的 `equals` 和 `hashCode` 方法来实现,例如:
```java
List<Person> persons = new ArrayList<>();
// 添加一些 Person 对象到 persons 列表中
List<Person> distinctPersons = persons.stream().distinct().collect(Collectors.toList());
```
在上述代码中,Person 类需要正确实现 `equals` 和 `hashCode` 方法,以便 Stream API 可以正确地对 Person 对象进行去重。
阅读全文
相关推荐













