我写的是:
Arrays
.stream(docIDs.split(","))
.parallel()
.forEachOrdered(i -> {
try {
System.out.print(
Files.lines(Paths.get(spamDir +"\\cw12-" + i.substring(10,16) + ".txt"))
.filter(j -> j.matches("^(\\d\\d)\\s" + i))
.map(line -> line.substring(0, line.indexOf(" ")))
.findFirst()
.orElse("-1")
);
} catch (Exception e1) {
System.out.print("-1");
}
}
);
我正在打印字符串的一部分,如上所示。
我需要在每个元素(数字)之间放置“,”逗号。 { 我要检查我是否在最后一个元素中,并根据它添加“,”逗号。这就是为什么我需要知道我是否在最后一个元素中。 }
我想了很多,但没有找到解决的方法。我该怎么办?
最佳答案
有几件事:
parallel
和forEachOrdered
基本上相互抵消。并行
无论如何都不是一个好主意。- 您无法检测自己是否位于最后一个元素。
无论如何,还有更好的解决方案。
System.out.println( Arrays.stream(docIDs.split(",")) .parallel() // included because OP included it .map(i -> { // this is how you should use Files.lines anyway try (Stream<String> lines = Files.lines(Paths.get(spamDir +"\\cw12-" + i.substring(10,16) + ".txt"))) { return lines .filter(j -> j.matches("^(\\d\\d)\\s" + i)) .map(line -> line.substring(0, line.indexOf(" "))) .findFirst() .orElse("-1"); } catch (IOException e1) { return "-1"; } }) .collect(Collectors.joining(",")));
...原始问题的答案的核心是使用Collectors.joining
,而不是首先尝试执行顺序循环。
关于java - 如何检测我何时处于最后一个循环? ( lambda ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43664385/