Java 8 Java8收集器中的控制流是如何进行的?
我正在学习如何使用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
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转换为字符串
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));