-
[자바/Java] 자바 스트림 (Stream) 알아보기Java 2021. 6. 18. 11:27
스트림(Stream)이란
: 자바 8부터 추가된 컬렉션의 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자
스트림의 특징
- 람다식으로 요소 처리가 가능하다.
- 내부 반복자를 사용하므로 병렬 처리가 쉽다.
- 요소의 중간 처리와 최종 처리를 할 수 있다.
사용 예
List<String> list = Arrays.asList("hong", "gom", "bong"); list.stream() .forEach(name -> System.out.println(name) );
stream() 메서드로 스트림 객체를 얻고 forEach() 안에 매개값 람다식을 통해 요소를 하나씩 콘솔에 출력한다.
이게 가능한 이유는 forEach() 메서드는 Consumer 함수적 인터페이스 타입의 매개값을 가지기 때문이다.
flatMapXXX() 메서드
: flatMapXXX() 메서드는 해당 스트림의 요소를 대체하는 복수 개의 요소들로 구성된 새로운 스트림을 리턴한다.
ex)
List<String> list = Arrays.asList("hong gom", "gom bong"); list.stream() .flatMap(data -> Arrays.stream(data.split(" "))) .forEach(word -> System.out.println(word)); /* 결과 : hong gom gom bong */
위 코드를 보면 flatMap() 메서드로 리스트의 각 요소를 split해서 새로운 스트림을 리턴 후 그 스트림을 forEach() 메서드를 통해 출력해줬다.
mapXXX() 메서드
: mapXXX() 메서드는 요소를 대체하는 요소로 구성되 새로운 스트림을 리턴한다.
ex)
List<Product> list = Arrays.asList( new Product("사과", 3000), new Product("붕어빵", 1000), new Product("바나나", 2000) ); list.stream() .mapToInt(Product :: getPrice) .forEach(price -> System.out.println(price)); /* 결과 : 3000 1000 2000 */
위 코드를 보면 mapToInt() 메서드를 통해 각 요소의 가격을 long 에서 int로 타입으로 변환후 스트림을 리턴해줬고 그 요소를 출력해줬다. ('::' 더블 콜론에 의미를 모르겠으면 자바 메서드 참조 표현식을 검색해보길 바란다.)
마치며
이외에도 스트림은 정말 다양한 메서드를 지원한다.
사용할 필요가 생길 때마다 검색해서 찾아보는 것이 좋을 것 같다.
참고자료
- 신용권, 「이것이 자바다」, 한빛미디어 (2015)
'Java' 카테고리의 다른 글
[자바/Java] 자바 JPA 알아보기 (0) 2021.07.25 [자바/Java] 자바 빌더 패턴(Builder Pattern) 알아보기 (0) 2021.07.18 [자바/Java] 자바 접근 제한자 알아보기 (Access Modifier) (0) 2021.06.18 [자바/Java] 자바 람다 (lambda) 표현식 알아보기 (0) 2021.06.17 [자바/Java] JDK, JRE,JVM의 차이는 뭘까? (0) 2021.02.27