LongStream类提供了另一种collect方法的变体,IntStream类和DoubleStream类也类似提供了该方法。
<R> R collect(Supplier<R> supplier,
ObjLongConsumer<R> accumulator,
BiConsumer<R,R> combiner)
在此流的元素上执行可变约简操作。可变约简是指约简值是可变结果容器(例如ArrayList),并且通过更新结果状态而不是替换结果来合并元素。这将产生与以下相当的结果:
R result = supplier.get();
for (long element : this stream)
accumulator.accept(result, element);
return result;
与reduce(long, LongBinaryOperator)类似,collect操作可以在不需要额外同步的情况下并行化执行。这是一个终端操作。
使用此collect方法回答您的问题如下:
LongStream.of(1L, 2L, 3L, 3L).filter(i -> i > 2)
.collect(ArrayList::new, (list, value) -> list.add(value)
, (list1, list2) -> list1.addAll(list2))
以下是方法引用的变体,它非常聪明,但有些棘手难懂:
LongStream.of(1L, 2L, 3L, 3L).filter(i -> i > 2)
.collect(ArrayList::new, List::add , List::addAll)
以下是 HashSet 变量的变体:
LongStream.of(1L, 2L, 3L, 3).filter(i -> i > 2)
.collect(HashSet::new, HashSet::add, HashSet::addAll);
同样,LinkedList的变体如下:
LongStream.of(1L, 2L, 3L, 3L)
.filter(i -> i > 2)
.collect(LinkedList::new, LinkedList::add, LinkedList::addAll)
sourceLongList
,可以使用Collection.removeIf(…)
进行方便的操作。请注意,该方法可以移除满足特定条件的元素。 - HolgerList<Long> targetLongList = sourceLongList.stream().collect(Collectors.toList());
- leeyuiwah