groupBy는 컬렉션을 특정 조건에 따라 여러 그룹으로 나눠주는 메소드입니다.

자바의 groupingBy랑 비슷한거라고 보시면 됩니다.

 

public inline fun <T, K> Iterable<T>.groupBy(keySelector: (T) -> K): Map<K, List<T>> {
    return groupByTo(LinkedHashMap<K, MutableList<T>>(), keySelector)
}

함수를 보면 keySelector를 파라미터로 받아 Map<K, List<T>>를 반환하네요

 

data class Person(val name: String, val age: Int)

val students = listOf(
    Person("Tom", 20),
    Person("David", 21),
    Person("Linda", 21),
    Person("S", 22),
)

println(students.groupBy { it.age })  // Map<Int, List<Person>>

예제입니다

이걸 자바로 써본다면?

 

import java.util.List;
import java.util.Map;

import static java.util.stream.Collectors.groupingBy;

public class JPerson {
    private String name;
    private Integer age;

    public JPerson(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public static class Inner {
        public Map<Integer, List<JPerson>> example() {
            List<JPerson> students = List.of(
                    new JPerson("tom", 20),
                    new JPerson("joe", 21),
                    new JPerson("casey", 21),
                    new JPerson("peter", 22)
            );

            return students.stream()
                    .collect(groupingBy(JPerson::getAge));
        }
    }
}

...

 

(코틀린) 1승 추가욧~~

반응형

'프로그래밍 > Kotlin' 카테고리의 다른 글

[Kotlin] Scope function (범위 함수)  (0) 2022.04.03
[Kotlin] flatMap, flatten  (0) 2022.04.02
[Kotlin] count, size 함수 (kotlin in action)  (0) 2022.04.02
[Kotlin] 람다 (lambda)  (0) 2022.03.27
[Kotlin] Delegation (위임)  (0) 2022.03.27