앞서 스트림과 스트림의 연산에 대해 알아봤다.
데이터를 다듬는 스트림 중간연산의 종류에 대해 알아보자.
https://standout.tistory.com/1445
distinct
중복된 요소를 제거
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> stream = Stream.of("apple", "banana", "apple", "cherry", "banana");
stream.distinct().forEach(System.out::println);
}
}
[출력결과]
apple
banana
cherry
filter
주어진 조건에 맞는 요소만 필터링
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.filter(x -> x % 2 == 0).forEach(System.out::println);
}
}
[출력결과]
2
4
limit
스트림에서 처음 나오는 n개의 요소를 제한
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
stream.limit(5).forEach(System.out::println);
}
}
[출력결과]
1
2
3
4
5
skip
처음 n개의 요소를 건너뛴 후, 나머지 요소를 반환
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.iterate(1, n -> n + 1);
stream.skip(3).forEach(System.out::println);
}
}
[출력결과]
4
5
6
...
peek
각 요소를 소비하되, 소비된 요소를 변경하지 않고 확인할 수 있는 기능을 제공
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
stream.peek(System.out::println).count();
}
}
[출력결과]
1
2
3
4
5
sorted
요소를 정렬
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<Integer> stream = Stream.of(3, 1, 4, 1, 5, 9, 2, 6);
stream.sorted().forEach(System.out::println);
}
}
[출력결과]
1
1
2
3
4
5
6
9
map
각 요소를 주어진 함수에 매핑
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
Stream<String> stream = Stream.of("apple", "banana", "cherry");
stream.map(String::toUpperCase).forEach(System.out::println);
}
}
[출력결과]
APPLE
BANANA
CHERRY
mapToDouble
요소를 double로 매핑하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 각 요소를 double로 변환하여 출력
numbers.stream()
.mapToDouble(x -> x * 1.5)
.forEach(System.out::println);
}
}
[출력결과]
1.5
3.0
4.5
6.0
7.5
mapToInt
요소를 int로 매핑하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Double> numbers = Arrays.asList(1.5, 2.5, 3.5, 4.5, 5.5);
// 각 요소를 int로 변환하여 출력
numbers.stream()
.mapToInt(Double::intValue)
.forEach(System.out::println);
}
}
[출력결과]
1
2
3
4
5
mapToLong
요소를 long으로 매핑하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
// 각 요소를 long으로 변환하여 출력
numbers.stream()
.mapToLong(x -> x * 1000L)
.forEach(System.out::println);
}
}
[출력결과]
1000
2000
3000
4000
5000
flatMap
각 요소를 스트림으로 매핑하고, 모든 스트림을 하나의 스트림으로 연결하는 중간 연산
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
List<List<String>> words = Arrays.asList(
Arrays.asList("Hello", "World"),
Arrays.asList("Stream", "API"),
Arrays.asList("Java", "Programming")
);
// 각 요소를 스트림으로 변환하고 모두 하나의 스트림으로 연결하여 출력
words.stream()
.flatMap(List::stream)
.forEach(System.out::println);
}
}
[출력결과]
Hello
World
Stream
API
Programming
flatMapToDouble
각 요소를 double 스트림으로 매핑하고, 모든 double 스트림을 하나의 double 스트림으로 연결하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<Double>> numbers = Arrays.asList(
Arrays.asList(1.1, 2.2, 3.3),
Arrays.asList(4.4, 5.5),
Arrays.asList(6.6, 7.7, 8.8, 9.9)
);
// 각 요소를 double 스트림으로 매핑하고 모든 스트림을 하나의 double 스트림으로 연결하여 출력
numbers.stream()
.flatMapToDouble(list -> list.stream().mapToDouble(Double::doubleValue))
.forEach(System.out::println);
}
}
[출력결과]
1.1
2.2
3.3
4.4
5.5
6.6
7.7
8.8
9.9
flatMapToInt
각 요소를 int 스트림으로 매핑하고, 모든 int 스트림을 하나의 int 스트림으로 연결하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<Integer>> numbers = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5),
Arrays.asList(6, 7, 8, 9)
);
// 각 요소를 int 스트림으로 매핑하고 모든 스트림을 하나의 int 스트림으로 연결하여 출력
numbers.stream()
.flatMapToInt(list -> list.stream().mapToInt(Integer::intValue))
.forEach(System.out::println);
}
}
[출력결과]
1
2
3
4
5
6
7
8
9
flatMapToLong
각 요소를 long 스트림으로 매핑하고, 모든 long 스트림을 하나의 long 스트림으로 연결하는 중간 연산
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<List<Long>> numbers = Arrays.asList(
Arrays.asList(100L, 200L, 300L),
Arrays.asList(400L, 500L),
Arrays.asList(600L, 700L, 800L, 900L)
);
// 각 요소를 long 스트림으로 매핑하고 모든 스트림을 하나의 long 스트림으로 연결하여 출력
numbers.stream()
.flatMapToLong(list -> list.stream().mapToLong(Long::longValue))
.forEach(System.out::println);
}
}
```
[출력결과]
100
200
300
400
500
600
700
800
900
'JAVA' 카테고리의 다른 글
스트림 특정범위의 정수만들기 range() rangeClosed() (0) | 2024.03.05 |
---|---|
스트림의 연산 - 최종연산 forEach forEachOrdered count max min findANy findFirst allMatch anyMatch noneMatch toArray reduce collect (0) | 2024.03.05 |
스트림의연산, 중간 연산과 최종연산 (0) | 2024.03.05 |
메서드 참조, 람다식을 더욱 간략히 (0) | 2024.03.05 |
Function의 합성 andThen compose identity 과 Predicate의 조건결합 and or negate isEqual (0) | 2024.03.05 |