stream 流去重取最后一个元素
时间: 2023-11-28 19:58:19 浏览: 87
dedupe-stream:防止连续重复排放的流
可以通过使用Java 8的Stream API中的collect方法和Collectors.toMap方法来实现。
假设我们有一个List<String>,其中可能包含重复的元素。我们想要去掉重复项,并仅保留每个重复项中最后一个出现的元素。我们可以按如下方式实现:
```
List<String> list = Arrays.asList("a", "b", "c", "a", "d", "c");
Map<String, String> map = list.stream()
.collect(Collectors.toMap(
Function.identity(), // key为元素本身
Function.identity(), // value也为元素本身
(oldValue, newValue) -> newValue // 如果有重复的key,取最后一个值
));
List<String> result = new ArrayList<>(map.values());
```
在上面的代码中,我们使用了`Function.identity()`作为键和值的提取器,这意味着我们将元素本身用作键和值。在`toMap`方法的第三个参数中,我们定义了一个合并函数,它将在出现重复键时用于确定保留哪个值。在我们的情况下,我们只是简单地选择了最后一个值,并将其作为值返回到map中。最后,我们将map的值转换为List并返回。
上面的代码将输出:`[b, d, c, a]`,即去重后只保留每个重复元素中的最后一个元素。
阅读全文