Java 8부터 도입된 Stream API는 Java 컬렉션에서 데이터를 처리하고 조작하는 데 사용되는 함수형 인터페이스를 제공합니다. Stream API는 일반적으로 데이터를 처리하거나 필터링하는 데 사용되며, 컬렉션과 배열의 요소를 하나씩 처리합니다. 이러한 요소는 함수형 프로그래밍 패러다임에서 사용되는 함수 인터페이스로 변환됩니다.
Stream API의 이점
- 코드 간결성
- 성능 향상
- 병렬 처리 가능
Stream API 사용법
1. Stream 생성
1-1. Collection으로부터 Stream 생성
Collection 인터페이스의 stream() 메서드를 사용하여 Stream을 생성할 수 있습니다.
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> numberStream = numbers.stream();
1-2. 배열로부터 Stream 생성
Arrays.stream() 메서드를 사용하여 배열로부터 Stream을 생성할 수 있습니다.
int[] numbers = { 1, 2, 3, 4, 5 };
IntStream numberStream = Arrays.stream(numbers);
2. 중간 연산
중간 연산은 Stream을 필터링하고 변환하는데 사용됩니다.
2-1. filter()
filter() 메서드를 사용하여 Stream을 필터링할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
Stream<Integer> evenStream = numberStream.filter(n -> n % 2 == 0);
2-2. map()
map() 메서드를 사용하여 Stream의 요소를 변환할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
Stream<Integer> squaredStream = numberStream.map(n -> n * n);
2-3. sorted()
sorted() 메서드를 사용하여 Stream의 요소를 정렬할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
Stream<Integer> sortedStream = numberStream.sorted();
3. 최종 연산
최종 연산은 Stream의 결과를 생성하거나 반환하는 데 사용됩니다.
3-1. forEach()
forEach() 메서드를 사용하여 Stream의 요소를 반복할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
numberStream.forEach(System.out::println);
3-2. reduce()
reduce() 메서드를 사용하여 Stream의 모든 요소를 하나의 결과로 결합할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
int sum = numberStream.reduce(0, Integer::sum);
3-3. collect()
collect() 메서드를 사용하여 Stream의 요소를 수집하여 Collection으로 반환할 수 있습니다.
Stream<Integer> numberStream = numbers.stream();
List<Integer> numberList = numberStream.collect(Collectors.toList());
마무리
Java Stream API는 코드 간결성과 성능 향상을 제공하는 동시에 병렬 처리가 가능하여 대용량 데이터 처리에 유용합니다. 하지만 Stream API를 잘못 사용하면 성능이 떨어지거나 예기치 않은 결과를 초래할 수 있습니다. 따라서 Stream API를 사용할 때는 주의가 필요합니다.
이번 블로그에서는 Java Stream API의 기본적인 사용법을 알아보았습니다. Stream API는 Java 8부터 도입되었으며, Java 9부터는 새로운 기능이 추가되었습니다. Stream API를 사용하면 코드의 가독성과 성능을 개선할 수 있으므로, Java 개발자라면 한번쯤 공부해보는 것을 추천합니다.
'java > study' 카테고리의 다른 글
[Java] ofNullable()에 대해서 알아보자 (0) | 2023.02.25 |
---|---|
[java] Function에 대해서 알아보자 (0) | 2023.02.24 |