首页 > 解决方案 > 从流中的最后一个跳过

问题描述

有没有办法从处理中排除最后 n 个元素?类似于跳过方法但从最后一个跳过的东西。

标签: javajava-8java-stream

解决方案


limit如果您提前知道长度,您可以使用 来实现。否则,你不能。

int lastToSkip = 5;

someList.stream()
    .limit(someList.size() - lastToSkip)
    .forEach(System.out::println);

如评论中所述,您试图跳过文件的最后 N 行。但是如果你不知道总共有多少行,你怎么知道最后 N 行是哪几行呢

一些潜在的解决方案:

  • 使用 afilter使拖车线免除。也许预告片的线条遵循其他线条没有的某种模式,并且您可以应用谓词来识别它们,无论有多少。

  • 执行文件的第一遍以仅计算行数。在第二遍中进行处理。需要读取整个文件两次。

  • 使用回溯方法。也将您的处理应用到拖车行,在您完成所有行之后,然后应用逆运算以有效地“撤消”已处理拖车行的影响。根据您的处理所涉及的内容,可能无法实现。


推荐阅读