【问题标题】:How to skip only nth element in java stream如何只跳过java流中的第n个元素
【发布时间】:2023-01-26 02:17:37
【问题描述】:

在给定的整数列表中,我想跳过nth 索引处的一个元素。

输入:

{ 1, 2, 3, 4, 5 }

跳过第三个元素后的预期输出:

{ 1, 2, 4, 5 }

我可以看到即使在并行运行时,stream 始终返回最后 3 个元素,尽管它们的顺序不同。那么,流可以知道每个的索引还是随机巧合?

Stream.of(1,2,3,4,5)
    .parallel()
    .skip(2)
    .forEach(System.out::println);

所以我的问题是,是否可以使用 Java Streams 只跳过列表中的一个元素?

【问题讨论】:

  • Stream.of(...).filter(value -> value != 3)...
  • @Turing85 应该从索引中过滤,而不是从值中过滤
  • 流没有“索引”。
  • 更重要的是:不能保证相遇顺序,尤其是在并行流中。

标签: java java-stream


【解决方案1】:

Stream 不是数据结构,不保存数据。它表示数据将流过的管道以及对数据进行操作的函数。特别是您不能指向流中某个元素存在的位置。你可以做的是流过索引,过滤掉你不需要的索引并映射到列表元素:

int n = 3;
List<Integer> myList = List.of(1, 2, 3, 4, 5);
IntStream.range(0, myList.size())
         .filter(i -> i !=n)
         .map(myList::get)
         .forEach(System.out::println);

或者在流式传输时仅包含您需要的源元素:

Stream.concat(myList.subList(0, n).stream(), myList.subList(n+1, myList.size()).stream())
          .forEach(System.out::println);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    相关资源
    最近更新 更多