【发布时间】:2021-02-06 07:49:52
【问题描述】:
我有一个对象流,它根据它们拥有的 id 定义等号和哈希码。所以我知道使用stream.distinct() 我会得到一个没有任何重复的流,但它会保留第一个出现,而不是最后一个。
这在文档中有明确说明:
对于有序流,不同元素的选择是稳定的 *(对于重复的元素,在遭遇中最先出现的元素 * 订单被保留。)
那么我怎样才能有一个没有重复但保留最后一次出现的流呢?
例如,如果我有此项目列表1,2,3,1,4,5。
如果我申请distinct(),我将得到1,2,3,4,5,我期待:2,3,1,4,5。我怎样才能做到这一点?
【问题讨论】:
-
您是否尝试颠倒顺序,然后删除重复项并再次颠倒顺序?
-
我严重怀疑您是否可以使用流实现此目的。这将要求流函数“向前看”以查看流中稍后是否出现重复项,或者返回并追溯删除已允许通过输出的项目。这些都不是流的“特征”的一部分。
-
您为什么还要关心“第一个”或“最后一个”元素是否保留在流中?如果它们相等,那真的没关系!
-
@Seelenvirtuose 您对 OP 的用例了解得不够多,无法说出它是否重要。
-
@TimothyTruckle 也许你没有仔细阅读。他说项目的顺序很重要,这意味着
List(或数组)绝对是正确的数据结构,因为列表是有序的。
标签: java java-8 java-stream