假设我有一个这样的列表:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
是否可以使用 Java Stream API 包装此列表中的每个第二个元素以获得这样的列表?
[1, 3, 5, 7, 9]
或者也许每三个元素?
[1, 4, 7, 10]
基本上,我正在寻找这样的函数来从流中获取每个第 n 个元素:
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> list2 = list.stream().takenth(3).collect(Collectors.toList());
System.out.println(list2);
// => [1, 4, 7, 10]
引入 Java 线程的主要动机之一是允许并行操作。这导致要求 Java Streams 操作(例如
mapandfilter)独立于流中元素的位置或其周围的元素。这样做的好处是可以轻松拆分线程以进行并行处理。缺点是某些操作的复杂性。因此,没有简单的方法来执行诸如获取每第 n 个项目或将每个项目与所有先前项目的总和匹配的事情。
满足您的要求的最简单方法是使用列表索引:
谢尔盖·戈尔诺斯塔耶夫的注意事项:
使用
Stream.iterate使用Guava库(GitHub):
使用AbacusUtil库:
使用jOOλ库及其方法
zipWithIndex():