我写了这个:
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");
}
}
);
如上所示,我正在打印字符串的一部分。
我需要在每个元素(数字)之间加上','逗号。 { 我会检查我是否在最后一个元素中,我会用','逗号说。这就是为什么我需要知道我是否在最后一个元素。 }
我想了很多,但我找不到解决方法。我怎么能这样做?
答案 0 :(得分:3)
一些事情:
parallel
和forEachOrdered
基本上相互抵消。parallel
无论如何都不是一个好主意。无论如何,这是一个更好的解决方案。
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
,而不是首先尝试执行顺序循环。