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 |