从流中的最后一个跳过

Azo*_*ous 1 java java-8 java-stream

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

Mic*_*ael 7

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

int lastToSkip = 5;

someList.stream()
    .limit(someList.size() - lastToSkip)
    .forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)

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

一些潜在的解决方案:

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

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

  • 使用回溯方法。也将处理应用于拖车线,完成所有线后,应用逆操作以有效“消除”处理拖车线的影响。可能无法实现,具体取决于您的处理涉及的内容。