Java 8 스트림을 사용하는 방법을 배우고 있습니다. 이 코드 조각을 디버깅하는 동안 :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));
실행은 결코 StringJoiner::merge
또는 StringJoiner::toString
에 도달하지 않습니다. 결합 자 (StringJoiner::merge
)를 null로 바꾸면 코드에서 널 포인터 예외가 발생합니다. 나는 따라갈 수 없다.
추가 (관련) 질문 : 나는 람다 디버깅에 대한 로깅을 추가 할 수있는 방법
? 여러 줄 코드 블록에 중괄호를 추가하려고 시도했습니다.
Collector<Person, StringJoiner, String> collector =
Collector.of(
() -> {
System.out.println("Supplier");
new StringJoiner(" | ")},
(j,p) -> j.add(p.name.toLowerCase()),
StringJoiner::merge,
StringJoiner::toString);
에 병합 소목 변환