java stream流对list去重
时间: 2023-08-25 22:59:54 浏览: 114
你可以使用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流通过id去重
在 Java 中,Stream API 提供了强大的处理集合数据的能力,包括去重操作。如果你想通过某个属性(比如 id)对 Stream 中的对象进行去重,可以使用 `distinct()` 和 `Collectors.toSet()` 或者自定义 `BiPredicate` 实现。
如果你有一个 List 类型的对象列表,并且想要基于 id 属性去除重复:
```java
List<YourObject> list = ...; // 假设 YourObject 有一个名为 id 的字段
// 使用 Collectors.toSet(),它会自动去除重复元素
Set<Integer> uniqueIds = list.stream()
.map(YourObject::getId) // 获取每个对象的 id
.collect(Collectors.toSet());
List<YourObject> distinctObjects = list.stream()
.filter(obj -> !uniqueIds.contains(obj.getId())) // 过滤掉 id 已经存在的对象
.collect(Collectors.toList()); // 获取去重后的对象列表
// 如果想自定义去重规则,可以用 BiPredicate 来判断两个对象是否相等
Map<Integer, YourObject> map = list.stream()
.collect(Collectors.toMap(
obj -> obj.getId(),
Function.identity(), // 第二个参数用于冲突时的选择,这里默认保留第一个
(oldObj, newObj) -> newObj // 当两个对象 id 相同时,返回新的对象
));
```
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]
```
这些方法中,第一种方法是最简单的,但是它只适用于基本类型和字符串。如果要处理对象,则需要使用第二种或第三种方法,其中第三种方法可以处理更复杂的情况。
阅读全文