배열을 스트림으로 변환한다는 것은 배열의 원소들을 스트림 형태로 변환하여 처리할 수 있게 하는 것
스트림은 원본 데이터를 변경하지 않고, 필요한 데이터 처리 작업을 적용한 결과를 생성
인덱스를 통한 직접 접근은 제공하지 않는다.
- 스트림을 사용하여 필터링, 매핑, 정렬 등 다양한 데이터 처리 작업 가능
- 최종 결과를 배열이나 컬렉션으로 변환 가능
- 데이터 처리 작업을 연속적인 파이프라인으로 나타낼 수 있어 가독성이 높고, 병렬 처리 쉽게 구현 가능
int[] numbers = {1,2,3,4,5,6};
int sumOfEvens = Arrays.stream(numbers)
.filter(n->n%2==0)
.sum();
중간연산 : 스트림을 처리하고, 다른 스트림을 반환
→ filter(), map(), sorted(), distinct(), limit(), skip()
최종연산 : 스트림을 처리하고 결과를 반환
→ forEach(), count(), collect(), reduce(), min(), max()
스트림종료 : 스트림의 자원을 해제하고, 최종결과 반환
→ close(), toArray()
List<Integer> nums = Arrays.asList(1,2,3,4,5);
int sum = nums.stream()
.filter(n->n%2==0)
.map(n->n*n)
.reduce(0, Integer::sum);
// = reduce(0, (x,y)->(x+y))
List<String> strList = Arrays.asList("apple","lemon","orange");
List<String> newStrList = strList.stream()
.map(String::toUpperCase) //=map(s->s.toUpperCase())
.collect(Collectors.toList());
System.out.println(newStrList);