Java 8 Java8收集器中的控制流是如何进行的?

Java 8 Java8收集器中的控制流是如何进行的?,java-8,java-stream,Java 8,Java Stream,我正在学习如何使用Java8流。调试这段代码时: Collector<Person, StringJoiner, String> collector = Collector.of( () -> new StringJoiner(" | "), (j,p) -> j.add(p.name.toLowerCase()), StringJoiner::merge, StringJoiner::toStr

我正在学习如何使用Java8流。调试这段代码时:

Collector<Person, StringJoiner, String> collector =  
    Collector.of(
        () -> new StringJoiner(" | "),
        (j,p) -> j.add(p.name.toLowerCase()),
        StringJoiner::merge,
        StringJoiner::toString);
        System.out.println(persons.stream().collect(collector));

下面是添加了调试语句的代码(我用字符串替换了Person,但它不会改变任何内容):

使用的线程数由流决定。如果它认为这是一个好主意,它可以将一个线程完成的任务分割成中间的两个线程。让我们假设它选择使用2:

  • 供应商创建了两个细木工,并为每个细木工分配了一个螺纹
  • 每根线都会增加一半的人
  • 合并器将两个合并器合并在一起
  • finisher将合并的joiner转换为字符串

在大多数情况下,方法引用直接调用目标方法创建函数对象,这是方法引用的效率优势。但这意味着与您的源代码没有连接,您可以在那里拦截代码流。顺便说一下,您不需要将lambda表达式转换为块形式来安装断点。这只是插入适当的换行符以使行调试工作正常的问题…
Collector<Person, StringJoiner, String> collector =
    Collector.of(
        () -> {
        System.out.println("Supplier");
        new StringJoiner(" | ")},
        (j,p) -> j.add(p.name.toLowerCase()),
        StringJoiner::merge,
        StringJoiner::toString);
    List<String> persons = Arrays.asList("John", "Mary", "Jack", "Jen");
    Collector<String, StringJoiner, String> collector =
        Collector.of(
            () -> {
                System.out.println("Supplier");
                return new StringJoiner(" | ");
            },
            (j, p) -> {
                System.out.println("Accumulator");
                j.add(p.toLowerCase());
            },
            (stringJoiner, other) -> {
                System.out.println("Combiner");
                return stringJoiner.merge(other);
            },
            (stringJoiner) -> {
                System.out.println("Finisher");
                return stringJoiner.toString();
            });
    System.out.println(persons.stream().collect(collector));
    List<String> persons = new ArrayList<>();
    for (int i = 0; i < 1_000_000; i++) {
        persons.add("p_" + i);
    }
    Collector<String, StringJoiner, String> collector =
        Collector.of(
            () -> {
                System.out.println("Supplier");
                return new StringJoiner(" | ");
            },
            (j, p) -> {
                System.out.println("Accumulator");
                j.add(p.toLowerCase());
            },
            (stringJoiner, other) -> {
                System.out.println("Combiner");
                return stringJoiner.merge(other);
            },
            (stringJoiner) -> {
                System.out.println("Finisher");
                return stringJoiner.toString();
            });
    System.out.println(persons.parallelStream().collect(collector));