java stream流对list去重
时间: 2023-08-25 08:59:54 浏览: 110
你可以使用Java 8中引入的Stream流来对List进行去重操作。下面是一个示例代码:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 4, 5, 5, 6, 6);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
System.out.println(distinctNumbers);
}
}
```
在上面的示例中,我们创建了一个包含重复元素的整数列表`numbers`。然后,我们使用`stream()`方法将其转换为流,然后使用`distinct()`方法对流中的元素进行去重操作。最后,我们使用`collect(Collectors.toList())`将去重后的元素收集到一个新的列表`distinctNumbers`中,并输出结果。
运行以上代码,输出将是`[1, 2, 3, 4, 5, 6]`,即去除了重复元素的列表。
相关问题
Java stream 对list去重
在Java 8及以上版本中,可以使用Java Stream API对List进行去重操作。下面是一些实现方法:
1. 使用distinct()方法:
```java
List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5);
List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());
System.out.println(distinctList); // Output: [1, 2, 3, 4, 5]
```
2. 使用Collectors.toSet()方法:
```java
List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5);
List<Integer> distinctList = list.stream().collect(Collectors.toSet())
.stream().collect(Collectors.toList());
System.out.println(distinctList); // Output: [1, 2, 3, 4, 5]
```
3. 使用Collectors.toMap()方法:
```java
List<Integer> list = Arrays.asList(1, 2, 2, 3, 3, 3, 4, 5);
List<Integer> distinctList = new ArrayList<>(list.stream()
.collect(Collectors.toMap(Function.identity(),
v -> v,
(v1, v2) -> v1))
.values());
System.out.println(distinctList); // Output: [1, 2, 3, 4, 5]
```
这些方法中,第一种方法是最简单的,但是它只适用于基本类型和字符串。如果要处理对象,则需要使用第二种或第三种方法,其中第三种方法可以处理更复杂的情况。
java List使用stream流根据id 去重
在Java中,你可以使用`List`的Stream API结合`distinct()`和`collect()`方法来根据某个字段(比如ID)去重。假设你有一个`Person`类,其中包含一个`id`属性,并且你的`List<Person>`存储了这些人:
```java
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
class Person {
private int id;
// 其他属性...
// getters and setters...
}
List<Person> persons = ... // 初始化你的person列表
// 使用Stream处理列表并根据id去重
List<Person> uniquePersonsById = persons.stream()
.distinct(Comparator.comparing(Person::getId))
.collect(Collectors.toList());
```
在这个例子中,`Comparator.comparing(Person::getId)`是一个函数式接口,它接受一个`Person`实例并返回其ID值,`distinct()`方法会根据这个比较器来找出唯一的元素。最后,`collect()`方法将处理后的流转换回一个新的`List<Person>`。
阅读全文