May 2025
Beginner to intermediate
424 pages
7h 7m
Korean
이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com
Java와 Kotlin 모두 컬렉션을 변환하고 줄일 수 있습니다. 하지만 설계 목표와 구현이 다릅니다. Kotlin은 Java 스트림 대신 무엇을 사용하며 언제, 어떻게 변환해야 할까요?
Java 8 은 2014년에 새로운 Lambda를 잘 활용하는 스트림을 도입했습니다. 빈 문자열(공백 문자만 있는 문자열)은 비어 있는 것처럼 처리해야 한다는 점을 제외하고 일부 문자열의 평균 길이를 계산하고 싶다고 가정해 보겠습니다. 이전에는 이렇게 작성했을 수 있습니다:
publicstaticdoubleaverageNonBlankLength(List<String>strings){varsum=0;for(vars:strings){if(!s.isBlank())sum+=s.length();}returnsum/(double)strings.size();}
Java 스트림을 사용하면 먼저 List 을 Stream 으로 변환하고 변환을 적용하여 이 알고리즘을 filter, map, reduce 으로 표현할 수 있습니다:
publicstaticdoubleaverageNonBlankLength(List<String>strings){returnstrings.stream().filter(s->!s.isBlank()).mapToInt(String::length).sum()/(double)strings.size();}
이 코드가 무엇을 하는지 확인하기 위해 머릿속에서 for-루프를 실행할 필요 없이, 한 줄씩 선언된 알고리즘의 단계를 확인하고 런타임에 의존하여 해당 단계를 구현할 수 있습니다.
그 결과가 정말 급하다면 글을 쓸 수도 있습니다:
publicstaticdoubleaverageNonBlankLength(List<String>strings){returnstrings.parallelStream().filter(s->!s.isBlank()).mapToInt(String::length).sum()/(double)strings.size();}
map 는 항목의 개수가 아닌 유형을 변경하고,filter 는 일부 속성에 따라 항목을 유지하거나 거부하지만 유형은 동일하게 유지하며,sum 는 컬렉션을 단일 속성으로 축소합니다. 이 예제에는 ...