相关疑难解决方法(0)

119
推荐指数
5
解决办法
7万
查看次数

获取流的最后一个元素的最有效方法

Stream没有last()方法:

Stream<T> stream;
T last = stream.last(); // No such method
Run Code Online (Sandbox Code Playgroud)

获取最后一个元素的最优雅和/或最有效的方法是什么(空流为null)?

java java-8 java-stream

71
推荐指数
4
解决办法
4万
查看次数

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

是否有一种理智的方式从列表中获取有序流(具体来说,数组列表,但它应该无关紧要)流式元素与它们在原始列表中的方式相反?

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

到目前为止,我在这里看到的最干净的方法之一是实现我自己的版本的SpliteratorORDERED和在列表中反向前进,或实施Iterator反向迭代是,并使用Spliterators.spliteratorUnknownSize(iterator,ORDERED)它.

注意这个问题不同于Java 8流逆序:其他问题询问如何反转流(一般情况下这是不可能的),并且答案提供了以某种方式反转源(我不想这样做),然后传输反向源.逆转源的成本是O(N),如果可能的话我想完全避免它.

java java-8 java-stream

18
推荐指数
5
解决办法
1万
查看次数

java.util.List的descendingIterator

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)
averse: 
Hello 2 Chocolate 10
reverse: 
10 Chocolate 2 Hello
Run Code Online (Sandbox Code Playgroud)

但是descendingIterator不适用于ListArrayList.有没有在列表说明任何解决办法,或者为什么的descendingIterator缺席的名单

问题类似于可以为java中的每个循环以相反的顺序执行吗?.但所有答案都建议使用临时解决方案或第三方库.

可能有使用溪流可能吗?(不幸的是,我的谷歌搜索只给出了流Java 8流逆序的缺失标准反转)

正如我所提到的,我的问题与关于流的问题有关,但是:

  • 使用stream只是一个选项,问题是关于java.util.Iteratorjava.util.List
  • 该问题的答案仅解决了部分案例,但表明缺乏方便的一般反向.如果我没有错过术语List是有序集合,对可比项目进行排序,实现顺序会缩小范围.

java linked-list arraylist java-8

4
推荐指数
2
解决办法
1753
查看次数

标签 统计

java ×4

java-8 ×3

java-stream ×2

arraylist ×1

collections ×1

linked-list ×1