流Iterator与forEachRemaining

时间:2018-06-13 16:37:22

标签: java java-8 iterator java-stream

我有一个迭代器,我需要将它传递给一个数组,我可以使用forEachRemaining做数据。

List<Page> array = new ArrayList<>();
iterator.forEachRemaining(array::add);

在其他方面,我可以用流

来做到这一点
array = StreamSupport.stream(
              Spliterators.spliteratorUnknownSize(
                      iterator, Spliterator.ORDERED),
              false).collect(Collectors.toList());

所以我的问题是哪一个更好?我的意思是,如果一个人的表现比另一个人好。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我希望第一种方法表现更好,因为执行的工作较少,而第二种方法涉及内部的几种方法调用以及所有其他类型的东西。

例如,forEachRemaining定义为;

default void forEachRemaining(Consumer<? super E> action) {
     Objects.requireNonNull(action);
     while (hasNext())
         action.accept(next());
}

另一方面,对stream(Spliterator<T> spliterator, boolean parallel)的调用会导致更多内部工作,这将对绩效产生影响。

那就是说,第一种方法肯定更具可读性。至于两种方法的确切统计数据,您需要进行衡量。