❓코틀린에서 스트림 함수란?
- JAVA와 달리 Kotlin에서는 stream 대신 유사한 함수를 표준 라이브러리로 제공
- JAVA는 stream 메서드를 호출해야함
1️⃣ map()
- 컬렉션 내의 자료들을 다른 값 또는 다른 타입으로 변환 시 사용
2️⃣ mapNotNull()
- 컬렉션 내의 자료들을 다른 값 또는 다른 타입으로 변환하고 변환 값이 null 값이면 무시
fun mapExample() {
val days = listOf("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
// map()
println("< map() 함수를 사용 했을 때 >")
days.map { day -> "오늘은 $day" }.forEach { println(it) }
println()
println("< map() 함수를 사용하고 null 값이 있을 때 >")
days.map { day -> if (day.length > 6) day else null }.forEach { println(it) }
println()
// mapNotNull()
println("< mapNotNull() 함수를 사용 했을 때 >")
days.mapNotNull { day -> if (day.length > 6) day else null }.forEach { println(it) }
}
/*
< map() 함수를 사용 했을 때 >
오늘은 Monday
오늘은 Tuesday
오늘은 Wednesday
오늘은 Thursday
오늘은 Friday
오늘은 Saturday
오늘은 Sunday
< map() 함수를 사용하고 null 값이 있을 때 >
null
Tuesday
Wednesday
Thursday
null
Saturday
null
< mapNotNull() 함수를 사용 했을 때 >
Tuesday
Wednesday
Thursday
Saturday
*/
3️⃣ mapIndexed()
- 컬렉션 내의 자료들과 그 자료의 인덱스를 이용하여 변환
fun mapIdxExample() {
val days = listOf("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday")
days.mapIndexed { index, s -> "$index 번째 요일 : $s"}.forEach{ println(it) }
}
/*
0 번째 요일 : Monday
1 번째 요일 : Tuesday
2 번째 요일 : Wednesday
3 번째 요일 : Thursday
4 번째 요일 : Friday
5 번째 요일 : Saturday
6 번째 요일 : Sunday
*/
4️⃣ flatMap()
- map()함수와 비슷하지만 다른 부분이 변환 함수의 반환 형이 iterable
- 컬렉션 내의 하나의 자료를 여러 개의 인자로 변환
fun flatMapExample() {
val days = listOf("Saturday", "Sunday")
days.flatMap { "$it".toList() }.forEach { print("#$it ") }
}
/*
#S #a #t #u #r #d #a #y #S #u #n #d #a #y
*/
➕JAVA에서 비슷하게 구현해보기
더보기
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.IntStream;
private static void mapExample() {
String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
System.out.println("< map() 함수를 사용 했을 때 >");
Arrays.stream(days).map(day -> "오늘은 " + day).forEach(System.out::println);
System.out.println();
System.out.println("< null 값이 있을 때 >");
Arrays.stream(days).map(day -> {
if (day.length() > 6) return day;
else return null;
}).forEach(System.out::println);
System.out.println();
System.out.println("< null 값이 없을 때 >");
Arrays.stream(days).map(day -> {
if (day.length() > 6) return day;
else return null;
}).filter(Objects::nonNull).forEach(System.out::println);
System.out.println();
System.out.println("< Index를 사용 했을 때>");
IntStream.range(0, days.length).mapToObj(idx -> idx + "번째 요일 : " + days[idx]).forEach(System.out::println);
System.out.println();
System.out.println("< flatMap()을 사용 했을 때>");
Arrays.stream(days).flatMap( day -> Arrays.stream(day.split(""))).forEach(s -> System.out.print("#" + s + " "));
/*
< map() 함수를 사용 했을 때 >
오늘은 Monday
오늘은 Tuesday
오늘은 Wednesday
오늘은 Thursday
오늘은 Friday
오늘은 Saturday
오늘은 Sunday
< null 값이 있을 때 >
null
Tuesday
Wednesday
Thursday
null
Saturday
null
< null 값이 없을 때 >
Tuesday
Wednesday
Thursday
Saturday
< Index를 사용 했을 때>
0번째 요일 : Monday
1번째 요일 : Tuesday
2번째 요일 : Wednesday
3번째 요일 : Thursday
4번째 요일 : Friday
5번째 요일 : Saturday
6번째 요일 : Sunday
< flatMap()을 사용 했을 때>
#M #o #n #d #a #y #T #u #e #s #d #a #y #W #e #d #n #e #s #d #a #y #T #h #u #r #s #d #a #y #F #r #i #d #a #y #S #a #t #u #r #d #a #y #S #u #n #d #a #y
*/
'Kotlin' 카테고리의 다른 글
[Kotlin] Stream 함수 #3. 조합 및 기타 함수 (2) | 2023.12.07 |
---|---|
[Kotlin] Stream 함수 #2.필터링 함수 (1) | 2023.12.05 |
[Kotlin] Label을 이용한 break, continue (1) | 2023.11.14 |
[Kotlin] 반복문(while, do-while, for) (0) | 2023.11.06 |
[Kotlin] 조건문(if-else, when) (0) | 2023.11.01 |
댓글