是否有一种明智的方法可以从列表(特别是数组列表,但这不重要)中获取有序流,该流以与原始列表中的相反的方式流式传输元素?
我正在寻找一种不涉及缓冲任何内容(收集器、另一个列表、数组等,因为它们复制浪费的容器)中的数据的解决方案,或者使用Collections.reverse
(因为它修改了列表)。
到目前为止,我在这里看到的最干净的方法是实现我自己的版本Spliterator
that's ORDERED
并反向推进列表,或者实施Iterator
反向迭代,并使用Spliterators.spliteratorUnknownSize(iterator,ORDERED)
on it.
请注意,这个问题不同于Java 8 流逆序 https://stackoverflow.com/questions/24010109/java-8-stream-reverse-order:另一个问题询问如何反转流(在一般情况下这是不可能的),并且答案提供以某种方式反转源(我不想这样做),然后流式传输反转的源。反转源的成本是 O(N),如果可能的话我想完全避免它。
If your List
是一个随机访问列表,您可以简单地使用
int num=list.size()-1;
IntStream.rangeClosed(0, num).mapToObj(i->list.get(num-i))
创建一个Stream
其具有以下特点ORDERED | SIZED | SUBSIZED
并提供完整的拆分支持。
对于非随机访问列表,例如LinkedList
然而,这将是一场性能灾难,谁使用LinkedList
anyway?
您还可以通过以下方式检查list instanceof
RandomAccess http://docs.oracle.com/javase/8/docs/api/java/util/RandomAccess.html first…
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)