当前位置: 首页 > 面试题库 >

如何在Java 8中以相反的顺序从列表中获取有序流

文志学
2023-03-14
问题内容

是否有一种从列表(特别是数组列表,但没关系)中获取有序流的合理方法,该方法以与原始列表相反的方式流元素?

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

到目前为止,我在这里看到的最干净的方法是实现自己的版本SpliteratorORDERED并以相反的Iterator方式遍历列表,或者实现以反向方式进行迭代并Spliterators.spliteratorUnknownSize(iterator,ORDERED)在其上使用。

请注意,此问题与Java8流反向顺序不同:另一个问题询问如何反向流(一般情况下这是不可能的),答案提供了以某种方式反向源(我不想这样做),然后流式传输反向源。反转源的成本为O(N),如果可能,我想完全避免。


问题答案:

如果您List是随机访问列表,则可以简单地使用

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

创建Stream具有特征ORDERED | SIZED | SUBSIZED并提供完全拆分支持的。

但是,对于像LinkedList这样的非随机访问列表而言,这将是性能损失,但是,谁使用它LinkedList呢?

您也可以先通过listinstanceofRandomAccess…进行检查。



 类似资料:
  • 我正在寻找一种解决方案,它不涉及在任何东西中缓冲数据(收集器、另一个列表、数组等,因为它们复制容器是浪费的),或者使用(因为它修改列表)。 到目前为止,我在这里看到的最简洁的方法是实现我自己版本的,即并反向遍历列表,或者实现一个并对其使用。 注这个问题不同于Java8的流反转顺序:另一个问题询问如何反转一个流(这在一般情况下是不可能的),答案是以某种方式反转源代码(我不想这么做),然后流反转的源代

  • 问题内容: 我尝试了一个小时,但没有找到任何最佳方法来实现反向的哈希图迭代,这就是我拥有的哈希图。 我也看过TreeMap的例子, 但是treemap也按升序给出,我想要的是降序。 问题答案: Hashmap没有特定的顺序。但是您可以使用TreeMap。 也许这个简单的例子可以帮助您:

  • 我按直接顺序列出了列表1<代码>列表 如何更改顺序。我不知道如何重写扩展类中的方法,请用例子写或说清楚。

  • 我将感谢任何帮助,我是一个初学者,因为你可能会告诉。提前谢谢大家! 我可以用递归来做这个,但我想学习弄清楚这个方法。

  • 我尝试测试对我的Web API的1个HTTP POST XML请求,XML如下所示: 当我用如下类列表反序列化请求时: 类体: 班级团结: 类别密钥: 反序列化后,我得到了除了键列表项的值之外的所有属性。(

  • 但这只有在保证先设置start的情况下才起作用。