You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Stream中sorted()后调用distinct()与直接调用distinct()结果是否不同?

问题原因分析

你看到的结果差异,核心在于Stream中distinct()和sorted()的执行顺序会直接影响最终输出,具体拆解如下:

1. distinct()的核心逻辑

distinct()会过滤掉流中重复的元素,但它遵循「保留元素在流中首次出现的实例」规则,后续出现的重复元素都会被剔除。

你的list3是list1和list2拼接后的结果,原始元素顺序为:

["aaaaa", "b", "lll", "kkk", "kkk", "h", "kkk", "mmmm"]

调用distinct()后,最终保留的元素是:

["aaaaa", "b", "lll", "kkk", "h", "mmmm"]

2. 两种流处理的差异对比

第一种处理:distinct() → sorted()

先对原始流去重,得到上面的去重列表,再按字符串长度排序。排序后元素顺序变为:

b(长度1)、h(长度1)、lll(长度3)、kkk(长度3)、mmmm(长度4)、aaaaa(长度5)

这就是第一组输出的内容。

第二种处理:直接调用distinct()

去重后直接按照原始流中元素首次出现的顺序输出,也就是:

aaaaa、b、lll、kkk、h、mmmm

和第一组的排序后顺序自然不同。

补充:如果调换执行顺序(sorted() → distinct())

如果先执行排序再去重,结果也会和直接去重有差异。比如排序后所有kkk会被集中排列,distinct()依然只保留第一个kkk,但此时整个流的元素已经是按长度排序后的状态,最终输出的顺序会和「先去重再排序」一致,但如果是其他包含重复元素的复杂场景,排序后再去重可能会改变distinct()保留的元素实例(比如原流中多个重复元素的属性有差异,但equals判断为重复的情况)。


内容的提问来源于stack exchange,提问作者MOHIT KAUSHIK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 10:55:32