java - 如何检测我何时处于最后一个循环? ( lambda )

标签 java lambda

我写的是:

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");
                        }
                    }
            );

我正在打印字符串的一部分,如上所示。

我需要在每个元素(数字)之间放置“,”逗号。 { 我要检查我是否在最后一个元素中,并根据它添加“,”逗号。这就是为什么我需要知道我是否在最后一个元素中。 }

我想了很多,但没有找到解决的方法。我该怎么办?

最佳答案

有几件事:

  • parallelforEachOrdered 基本上相互抵消。
  • 并行无论如何都不是一个好主意。
  • 您无法检测自己是否位于最后一个元素。
  • 无论如何,还有更好的解决方案。

    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/

相关文章:

java - IO读取(java)

java - 何时在 Java EE 环境中打开/关闭 hibernate session

java - 数据库模式不是在 EAR 应用程序中生成的

c++11 - 无法按值捕获随机引擎

Java 8 lambda 添加到 Hashmap 中的列表,在 Hashmap 中

mysql - 使用 LINQ/lambda .net MVC 从表中选择某些列的所有数据?

java - 我如何告诉 Java 在哪里可以找到 native 库?

java - 无法从 Object 转换为 List,但它已经是一个 List?

C# - 左外连接 lambda 表达式错误

java - 如何将可选映射到原始可选?