정의
데이터 처리 작업을 보다 간결하고 효율적으로 수행할 수 있게 도와주는 기능
컬렉션이나 배열 등의 데이터를 선언형 방식으로 처리
함수형 프로그래밍의 요소를 활용하여 데이터를 필터링, 변환. 집계하는 등의 작업을 손쉽게 처리
특징
- 선언적 코드 : 데이터를 처리하는 방식을 직접적으로 설명하지 않고, 어떤 작업을 할 것인지를 선언적으러 기술
- 병렬 처리 지원 : 간단한게 병렬 스트림을 사용하여 데이터 처리를 병렬로 수행
- 중간 연산과 최종 연산 : 스트림 연산은 중간 연산과 취종 연산으로 구분
주요 Stream 메서드
중간 연산(Intermediate Operations)
- filter : 조건에 맞는 요소를 걸러냄
- Map : 요소를 다른 형태로 변환
- sorted : 요소를 정렬
최종 연산
- collect : 스트림을 컬렉션이나 다른 형태로 변환
- forEach : 각 요소에 대해 작업을 수행
- reduce : 요소 결합
- count : 요소의 개수 카운트
예제
import java.util.Arrays;
import java.util.List;
//Stream
public class CountApp {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice","Bob","Charlie", "David");
//Stream을 이용한 중간연산
List<String> r1 = names.stream().filter(name -> name.length()>3).toList();
r1.forEach(s->System.out.println(s));
long r2 = names.stream().filter(name -> name.length()>3).count();
System.out.println(r2);
}
}
import java.util.Arrays;
import java.util.List;
// 기존 데이터를 변형할 때 - Map 사용
public class MapApp {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice","Bob","Charlie", "David");
List<String> newNames = names.stream().
map(name -> name.toLowerCase()).
filter(name -> name.length()>3).
toList();
newNames.forEach(name -> System.out.println(name));
}
}
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
//Stream
public class GroupApp {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice","Bob","Charlie", "David","Anna");
var groupData=names
.stream()
.map(name -> name.toUpperCase())
.collect(Collectors.groupingBy(s -> s.charAt(0)));
System.out.println(groupData);
}
}
import java.util.Arrays;
import java.util.List;
public class ReduceApp {
public static void main(String[] args) {
// 1.Reduce(조인)
List<Integer> nums = Arrays.asList(1,2,3,4);
int sum = nums.stream().mapToInt(x->x).sum();
System.out.println(sum);
int sum2 = nums.stream().reduce(5,(prev,next)->{
System.out.println("prev" + prev);
System.out.println("next" + next);
System.out.println("prev" + prev);
return prev+next;
});
System.out.println(sum2);
}
}
import java.util.Arrays;
import java.util.List;
// 기존 데이터를 변형할 때 - Map 사용
public class SortApp {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(5,2,3,1,4,2,5);
nums.stream()
.sorted()
.distinct()
.forEach( s -> System.out.println(s));
}
}
Share article