일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 프로그래머스
- 신입 개발자 면접
- Plating
- 자바 암호화 알고리즘
- 자바 stream
- 코딩테스트 연습
- 신입 개발자 필수 면접 질문
- .dockerignore
- 프로그래머스 코딩테스트
- 셰프의찾아가는구내식당
- docker
- 신입 개발자 자바 면접
- 자바 암호화 복호화
- 도커
- 자바 암호화
- 플레이팅
- 개발자 코딩테스트
- 개발자 인턴
- 개발자 정규직
- docker image
- 신입 개발자 자바 면접 질문
- 식단
- 개발자 면접 질문
- 신입 개발자 면접 질문
- Linux
- 직장인점심구독
- 식단일기
- 개발자 채용연계형인턴
- 샐러드
- 개발자 면접
- Today
- Total
달리는 두딘
[JAVA] Stream().filter, map, flatMap 사용 방법 및 예제 본문
Java8 Stream의
filter, map, flatMap 사용 방법 및 예제를 소개합니다.
Stream Filter
filter는 말 그대로 특정조건으로 스트림의 컨텐츠를 필터링하는 것입니다. 사용방법은 함수에 filter(조건)으로 조건을 넣으시면 됩니다. 아래 코드를 보시면 c로 시작하는 문자열만 필터링하도록 조건을 설정하였고 이 조건에 해당하는 문자의 stream이 리턴되었습니다.
List<String> list =
Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1", "c3");
Stream<String> stream1 = list.stream();
Stream<String> filtered = stream1.filter(s -> s.startsWith("c"));
filtered.forEach(System.out::println);
결과
c2
c1
c3
Stream Map
필터가 조건을 충족시키는 아이템들만으로 새로운 스트림을 생성한다면, Map은 각각의 item을 변경하여 새로운 컨텐츠를 생성하는 기능입니다. 필터와 마찬가지로 map(함수)으로 어떻게 아이템을 변경시킬 지 함수로 정의를 합니다.
아래 코드를 실행하면 모든 문자열이 대문자로 출력이 됩니다. s -> s.toUpperCase()이 대문자로 변경했기 때문입니다.
List<String> list =
Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1", "c3");
Stream<String> stream2 = list.stream();
stream2.map(s -> s.toUpperCase()).forEach(System.out::println);
결과
A1
A2
B1
B2
C2
C1
C3
정의한 함수 대신에 간단히 String::toUpperCase를 입력하여 위와 동일한 처리를 할 수 있습니다.
List<String> list =
Arrays.asList("a1", "a2", "b1", "b2", "c2", "c1", "c3");
Stream<String> stream3 = list.stream();
stream3.map(String::toUpperCase).forEach(System.out::println);
Stream FlatMap
FlatMap은 여러개의 스트림을 한개의 스트림으로 합쳐줍니다. 복잡한 스트림을 간단한 스트림으로 변경되는데 사용할 수 있습니다. 예를들어 아래 코드에서는 Stream<String[]>를 Stream<String> 형태로 변환하였습니다. 플랫맵도 flatMap(함수)로 정의를 합니다. s -> Arrays.stream(s)의 의미는 String[] => Stream<String>과 같아 결국 flatMap(Stream<String>)과 같은 꼴이네요. 플랫맵은 여러 Stream<String>객체들을 하나의 스트림 객체로 만들어줍니다. 최종적으로 Stream<String> stream5 객체가 생성되었습니다.
String[][] arrays = new String[][]{ {"a1", "a2"}, {"b1", "b2"}, {"c1", "c2", "c3"} };
Stream<String[]> stream4 = Arrays.stream(arrays);
Stream<String> stream5 = stream4.flatMap(s -> Arrays.stream(s));
stream5.forEach(System.out::println);
결과
a1
a2
b1
b2
c1
c2
c3
FlatMap + Filter + Map
위에서 설명한 기능들을 모두 함께 사용해보았습니다.
String[][] arrays = new String[][]{ {"a1", "a2"}, {"b1", "b2"}, {"c1", "c2", "c3"} };
Stream<String[]> stream6 = Arrays.stream(arrays);
Stream<String> stream7 = stream6.flatMap(s -> Arrays.stream(s));
stream7.filter(s-> s.startsWith("a"))
.map(String::toUpperCase).forEach(System.out::println);
결과
A1
A2
'지식노트' 카테고리의 다른 글
[JAVA] Stream - findAny()와 findFirst()의 차이점 (2) | 2022.09.06 |
---|---|
[Spring] WebClient 사용법 (2) | 2022.09.05 |
[DB] Lock이란? (0) | 2022.08.18 |
[기타] CI, DI란? (0) | 2022.08.11 |
[Spring] ThreadPoolTaskExecutor 설정 (2) | 2022.08.11 |