当前位置: 首页 > 知识库问答 >
问题:

在Java8中如何从列表中逆序获取有序流

龙越彬
2023-03-14

我正在寻找一种解决方案,它不涉及在任何东西中缓冲数据(收集器、另一个列表、数组等,因为它们复制容器是浪费的),或者使用collections.reverse(因为它修改列表)。

到目前为止,我在这里看到的最简洁的方法是实现我自己版本的spliterator,即ORDERED并反向遍历列表,或者实现一个iterators.spliteratorunknownsize(iterator,ORDERED)并对其使用spliterators.spliterators.unknownsize(iterator,ORDERED)

注这个问题不同于Java8的流反转顺序:另一个问题询问如何反转一个流(这在一般情况下是不可能的),答案是以某种方式反转源代码(我不想这么做),然后流反转的源代码。反转源的代价是O(N),如果可能的话,我想完全避免它。

共有1个答案

易衡
2023-03-14

如果列表是一个随机访问列表,则只需使用

int num=list.size()-1;
IntStream.rangeClosed(0, num).mapToObj(i->list.get(num-i))

创建一个,该流具有有序、大小减小并提供完全拆分支持的特性。

对于像LinkedList这样的非随机访问列表,这将是一个性能灾难,但是,到底谁会使用LinkedList呢?

 类似资料:
  • 问题内容: 我需要帮助。有什么办法可以在css / scss中显示逆序列表?类似于以下内容: 问题答案: 您可以旋转父元素,然后旋转子元素。 或者,您可以将flex框与 属性一起使用 。 尽管从技术上讲这并不是颠倒顺序,但您也可以将其 与伪元素一起使用。

  • 问题内容: 是否有一种从列表(特别是数组列表,但没关系)中获取有序流的合理方法,该方法以与原始列表相反的方式流元素? 我正在寻找一种不涉及在任何东西(收集器,另一个列表,数组等)中缓冲数据的解决方案,因为它们会复制浪费的容器或使用(因为它会修改列表)。 到目前为止,我在这里看到的最干净的方法是实现自己的版本,并以相反的方式遍历列表,或者实现以反向方式进行迭代并在其上使用。 请注意,此问题与Java

  • 我有一个映射“m”和一个列表“l”,现在我想从那个映射“m”中获取值,使用“l”中可用的键列表。我想用Java 8流的概念,任何人都可以在这方面提供帮助。 我编码打印这些值,但我需要的是将值放入列表中 list.stream().foreach(s->{system.out.println(map.get(s));});

  • 我有一个对象列表(文件夹)。该列表中的每个对象A都有一个对象B(合作伙伴)列表,对象B也有一个对象C(人员)列表。对象C包含一个属性代码,我想用它来使用Java8进行过滤。 我试过下面的代码,但它似乎不工作: 你们知道我如何使用FlatMap从

  • 问题内容: 我可以想到两种方式: 惯用的方式是什么?也许已经有一个库函数可以完全满足我的需求? 问题答案: 我猜这种方式(或至少是另一种方式)更有效: 由于该函数与完全兼容,因为它需要并返回。不执行自动装箱。 我也在寻找一个等价的,我希望写一个等价的您的方法: 但是他们没有提供这种方法。不知道为什么。

  • 问题内容: 我有一个应用程序,该应用程序可以获取制造过程的质量结果,并创建图形以显示不良品的帕累托图,并显示生产量。 为了自动化测试这些统计程序的任务,我希望确定性地能够将记录添加到数据库中,并使质量技术能够进入某些图表并与已知的良好图表进行比较。但是,我也想模拟结果,以便将它们像进入用户整个测试过程一样进入数据库。 我有一个想法是用i好的数字,j的坏数字1,k的坏数字2等填充一个列表,然后以某种