Stream没有last()方法:
Stream<T> stream;
T last = stream.last(); // No such method
Run Code Online (Sandbox Code Playgroud)
获取最后一个元素的最优雅和/或最有效的方法是什么(空流为null)?
是否有一种理智的方式从列表中获取有序流(具体来说,数组列表,但它应该无关紧要)流式元素与它们在原始列表中的方式相反?
我正在寻找一种不涉及缓冲数据的解决方案(收集器,另一个列表,数组等,因为它们复制了浪费的容器),或者使用Collections.reverse(因为它修改了列表).
到目前为止,我在这里看到的最干净的方法之一是实现我自己的版本的Spliterator这ORDERED和在列表中反向前进,或实施Iterator反向迭代是,并使用Spliterators.spliteratorUnknownSize(iterator,ORDERED)它.
注意这个问题不同于Java 8流逆序:其他问题询问如何反转流(一般情况下这是不可能的),并且答案提供了以某种方式反转源(我不想这样做),然后传输反向源.逆转源的成本是O(N),如果可能的话我想完全避免它.
LinkedList可以使用升序或降序迭代器迭代,如下所示:
LinkedList<Object> list = new LinkedList<Object>();
...
StringJoiner sJ1 = new StringJoiner(" ");
list.iterator().forEachRemaining(a -> sJ1.add(a.toString()));
System.out.println("averse: \n" + sJ1.toString());
StringJoiner sJ2 = new StringJoiner(" ");
list.descendingIterator().forEachRemaining(a -> sJ2.add(a.toString()));
System.out.println("reverse: \n" + sJ2.toString());
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)averse: Hello 2 Chocolate 10 reverse: 10 Chocolate 2 Hello
但是descendingIterator不适用于List和ArrayList.有没有在列表说明任何解决办法,或者为什么的descendingIterator缺席的名单?
问题类似于可以为java中的每个循环以相反的顺序执行吗?.但所有答案都建议使用临时解决方案或第三方库.
可能有使用溪流可能吗?(不幸的是,我的谷歌搜索只给出了流Java 8流逆序的缺失标准反转)
正如我所提到的,我的问题与关于流的问题有关,但是: