728x90
반응형
Stream API란?
java8부터 추가된 API로 함수형 인터페이스(람다식)를 적용하여 컬렉션과 같은 저장요소를 반복적으로 처리할 수 있는 기능이다.
1. 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.filer(s -> s.startsWith("c"));
filtered.forEach(System.out::println);
결과
c2
c1
c3
2. map
각각의 item을 변경하여 새로운 컨텐츠를 생성하는 기능이다. 필터와 마찬가지로 map(함수)로 어떻게 아이템을 변경시킬지 함수에 정의한다. 아래 코드를 실행하면 모든 문자열이 대문자로 출력된다.
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> stream2 = list.stream();
stream2.map(String::toUpperCase).forEach(System.out::println);
3. 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
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] Optional<T> 클래스 (0) | 2022.07.05 |
---|---|
[Java] 메소드 레퍼런스(Method reference, ::의 의미) (0) | 2022.07.05 |
[Java] 람다식(lambda expression) (0) | 2022.07.04 |
[Java] 익명 객체(anonymous object) (0) | 2022.07.04 |
[Java] Input/Output 정리 (0) | 2021.07.13 |