Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从流中的最后一个跳过_Java_Java 8_Java Stream - Fatal编程技术网

Java 从流中的最后一个跳过

Java 从流中的最后一个跳过,java,java-8,java-stream,Java,Java 8,Java Stream,有没有办法从处理中排除最后n个元素?类似于方法,但从最后一个跳过。如果您事先知道长度,您可以使用。否则,你不能 int lastToSkip = 5; someList.stream() .limit(someList.size() - lastToSkip) .forEach(System.out::println); 如注释中所述,您正试图跳过文件的最后N行。但是如果你不知道总共有多少行,你怎么知道最后的N行是哪一行呢 一些潜在的解决方案: 使用过滤器使拖车线免除。也许

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

如果您事先知道长度,您可以使用。否则,你不能

int lastToSkip = 5;

someList.stream()
    .limit(someList.size() - lastToSkip)
    .forEach(System.out::println);
如注释中所述,您正试图跳过文件的最后N行。但是如果你不知道总共有多少行,你怎么知道最后的N行是哪一行呢

一些潜在的解决方案:

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

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

  • 使用回溯方法。也将处理应用于拖车线,完成所有线后,应用反向操作以有效地“撤消”处理拖车线的影响。可能不可能,具体取决于处理所涉及的内容

如果您事先知道长度,您可以通过以下方式实现此目的。否则,你不能

int lastToSkip = 5;

someList.stream()
    .limit(someList.size() - lastToSkip)
    .forEach(System.out::println);
如注释中所述,您正试图跳过文件的最后N行。但是如果你不知道总共有多少行,你怎么知道最后的N行是哪一行呢

一些潜在的解决方案:

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

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

  • 使用回溯方法。也将处理应用于拖车线,完成所有线后,应用反向操作以有效地“撤消”处理拖车线的影响。可能不可能,具体取决于处理所涉及的内容


可能
takeWhile​(谓词可能
takeWhile​(Predicate没有排除最后n个元素的特殊方法,因为流可能是无限的,但您可以先处理n个元素,然后再处理后续元素的数量

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

或者,您可以使用,但只能用于已排序的流,以确保获得所需的元素

Stream.of(1,2,3,4,5,0).filter(i->i>3.forEach(System.out::println);/4.5

没有排除最后n个元素的特殊方法,因为流可能是无限的,但您可以先处理n个元素,然后再处理后续元素的数量

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

或者,您可以使用,但只能用于已排序的流,以确保获得所需的元素

Stream.of(1,2,3,4,5,0).filter(i->i>3.forEach(System.out::println);/4.5