stream流list去重
时间: 2023-09-26 19:11:36 浏览: 79
可以使用Java 8的Stream API来进行List的去重操作。下面是一个示例代码:
```java
List<String> list = Arrays.asList("a", "b", "c", "b", "d", "e", "a");
List<String> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList);
```
输出结果为:
```
[a, b, c, d, e]
```
在上面的代码中,我们先将一个包含重复元素的List转换成了Stream对象,然后使用`distinct()`方法进行去重操作,再使用`collect()`方法将结果收集到一个新的List中。
需要注意的是,这种去重方式保留了List中元素的顺序。如果要对List进行无序去重,可以使用`collect(Collectors.toSet())`方法。
相关问题
stream流list去重多字段
如果要对一个 `List` 中的对象进行去重,可以使用 Java 8 中的 `stream` 和 `distinct` 方法。假设我们有一个 `Person` 类,其中包含 `name` 和 `age` 两个字段,我们要对一个 `List<Person>` 进行去重,可以按照以下方法进行。
```java
List<Person> personList = new ArrayList<>();
personList.add(new Person("Alice", 20));
personList.add(new Person("Bob", 30));
personList.add(new Person("Alice", 20));
personList.add(new Person("Charlie", 40));
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
```
这里我们使用 `distinct` 方法对 `stream` 中的元素进行去重操作,`distinct` 方法默认使用对象的 `equals` 方法进行判断是否相等,如果要自定义对象的相等规则,可以重写 `equals` 方法和 `hashCode` 方法。
我们可以在 `Person` 类中重写 `equals` 方法和 `hashCode` 方法,按照 `name` 和 `age` 两个字段进行判断是否相等。
```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 boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
使用重写后的 `equals` 方法和 `hashCode` 方法,我们可以对 `Person` 对象进行按照 `name` 和 `age` 两个字段进行去重。
```java
List<Person> distinctPersonList = personList.stream()
.distinct()
.collect(Collectors.toList());
```
stream流 集合去重
Stream流是Java 8引入的一种强大的数据处理机制,它提供了一种懒惰计算的方式,可以在不将整个数据集加载到内存中的情况下进行各种操作,如过滤、映射、排序等。在处理集合去重时,Stream流提供了简洁的API来实现。
使用Stream流去除集合中的重复元素通常涉及以下步骤:
1. 创建一个流(Stream):首先从集合开始创建一个流。
2. 使用distinct()方法:这个方法返回一个新的流,其中包含了原流中的所有唯一元素。
3. 转换为集合或列表:最后,将去重后的流转换回集合或列表形式,以便存储。
示例代码如下:
```java
List<String> originalList = Arrays.asList("a", "b", "c", "b", "d", "e", "c");
List<String> uniqueList = originalList.stream()
.distinct() // 去重操作
.collect(Collectors.toList()); // 转换为列表
// uniqueList现在是["a", "b", "c", "d", "e"]
```
阅读全文