Skip to Content
Java에서 Kotlin으로
book

Java에서 Kotlin으로

by Duncan McGregor, Nat Pryce
May 2025
Beginner to intermediate
424 pages
7h 7m
Korean
O'Reilly Media, Inc.
Book available
Content preview from Java에서 Kotlin으로

13장. 이터러블에서 시퀀스로 스트림 전환하기

이 작품은 AI를 사용하여 번역되었습니다. 여러분의 피드백과 의견을 환영합니다: translation-feedback@oreilly.com

Java와 Kotlin 모두 컬렉션을 변환하고 줄일 수 있습니다. 하지만 설계 목표와 구현이 다릅니다. Kotlin은 Java 스트림 대신 무엇을 사용하며 언제, 어떻게 변환해야 할까요?

Java 스트림

Java 8 은 2014년에 새로운 Lambda를 잘 활용하는 스트림을 도입했습니다. 빈 문자열(공백 문자만 있는 문자열)은 비어 있는 것처럼 처리해야 한다는 점을 제외하고 일부 문자열의 평균 길이를 계산하고 싶다고 가정해 보겠습니다. 이전에는 이렇게 작성했을 수 있습니다:

public static double averageNonBlankLength(List<String> strings) {
    var sum = 0;
    for (var s : strings) {
        if (!s.isBlank())
            sum += s.length();
    }
    return sum / (double) strings.size();
}

Java 스트림을 사용하면 먼저 ListStream 으로 변환하고 변환을 적용하여 이 알고리즘을 filter, map, reduce 으로 표현할 수 있습니다:

public static double averageNonBlankLength(List<String> strings) {
    return strings
        .stream()
        .filter(s -> !s.isBlank())
        .mapToInt(String::length)
        .sum()
        / (double) strings.size();
}

이 코드가 무엇을 하는지 확인하기 위해 머릿속에서 for-루프를 실행할 필요 없이, 한 줄씩 선언된 알고리즘의 단계를 확인하고 런타임에 의존하여 해당 단계를 구현할 수 있습니다.

그 결과가 정말 급하다면 글을 쓸 수도 있습니다:

public static double averageNonBlankLength(List<String> strings) {
    return strings
        .parallelStream() 1
        .filter(s -> !s.isBlank())
        .mapToInt(String::length)
        .sum()
        / (double) strings.size();
}
1

parallelStream 는 작업을 여러 스레드로 분할합니다.

map 는 항목의 개수가 아닌 유형을 변경하고,filter 는 일부 속성에 따라 항목을 유지하거나 거부하지만 유형은 동일하게 유지하며,sum 는 컬렉션을 단일 속성으로 축소합니다. 이 예제에는 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

코드 밖 커뮤니케이션

코드 밖 커뮤니케이션

재퀴 리드
실리콘밸리 리더십

실리콘밸리 리더십

김정혜, 마이클 롭

Publisher Resources

ISBN: 9798341656055Supplemental Content