Java에서 스트리밍
Java 8에 도입된 Stream API는 객체 컬렉션을 처리하는 데 사용됩니다. Java의 스트림은 원하는 결과를 생성하기 위해 파이프라인을 사용할 수 있는 다양한 메서드를 지원하는 일련의 개체입니다.
Java에서 스트림 사용
Java에서 Stream의 용도는 다음과 같습니다.
- Stream API는 객체의 컬렉션을 표현하고 처리하는 방법입니다.
- 필터링, 매핑, 축소 및 정렬과 같은 작업을 수행할 수 있습니다.
Java 스트림을 생성하는 방법?
Java Stream Creation은 Java Stream의 기능을 고려하기 전 가장 기본적인 단계 중 하나입니다. 다음은 Java Stream을 선언하는 방법에 대한 구문입니다.
통사론
Stream stream;
여기서 T는 선언에 따라 클래스, 객체 또는 데이터 유형입니다.
자바 스트림 기능
Java 스트림의 기능은 다음과 같습니다.
- 스트림은 데이터 구조가 아니라 컬렉션, 배열 또는 I/O 채널에서 입력을 받습니다.
- 스트림은 원래 데이터 구조를 변경하지 않으며 파이프라인 방식에 따라 결과만 제공합니다.
- 각 중간 작업은 느리게 실행되고 결과적으로 스트림을 반환하므로 다양한 중간 작업을 파이프라인할 수 있습니다. 터미널 작업은 스트림의 끝을 표시하고 결과를 반환합니다.
스트림의 다양한 작업
Streams에는 두 가지 유형의 작업이 있습니다.
- 중간 작업
- 작업 종료
중간 작업
중간 작업은 여러 메서드가 연속적으로 연결되는 작업 유형입니다.
중간작업의 특징
- 메소드는 서로 연결되어 있습니다.
- 중간 작업은 스트림을 다른 스트림으로 변환합니다.
- 이는 한 방법으로 데이터를 필터링하고 처리 후 다른 방법으로 전달하는 필터링 개념을 가능하게 합니다.
자바 스트림의 이점
아래에 언급된 것처럼 Java에서 Stream을 사용하면 몇 가지 이점이 있습니다.
- 저장 공간 없음
- 기능 파이프라인
- 게으름
- 무한할 수 있다
- 병렬화 가능
- 컬렉션, 배열, 파일 라인, 스트림의 메서드, IntStream 등에서 생성될 수 있습니다.
중요한 중간 작업
아래에 언급된 몇 가지 중간 작업이 있습니다.
1. 지도()
map 메소드는 이 스트림의 요소에 주어진 함수를 적용한 결과로 구성된 스트림을 반환하는 데 사용됩니다.
List number = Arrays.asList(2,3,4,5); List square = number.stream().map(x->x*x).collect(Collectors.toList());
2. 필터()
필터 메소드는 인수로 전달된 조건자에 따라 요소를 선택하는 데 사용됩니다.
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().filter(s->s.startsWith('S')).collect(Collectors.toList()); 3. 정렬()
sorted 메소드는 스트림을 정렬하는 데 사용됩니다.
List names = Arrays.asList('Reflection','Collection','Stream'); List result = names.stream().sorted().collect(Collectors.toList()); 터미널 운영
터미널 작업은 결과를 반환하는 작업 유형입니다. 이러한 작업은 더 이상 처리되지 않고 최종 결과 값을 반환합니다.
중요한 터미널 운영
아래에 언급된 몇 가지 터미널 작업이 있습니다.
1. 수집()
Collect 메소드는 스트림에서 수행된 중간 작업의 결과를 반환하는 데 사용됩니다.
List number = Arrays.asList(2,3,4,5,3); Set square = number.stream().map(x->x*x).collect(Collectors.toSet());
2. 각각()
forEach 메소드는 스트림의 모든 요소를 반복하는 데 사용됩니다.
List number = Arrays.asList(2,3,4,5); number.stream().map(x->x*x).forEach(y->System.out.println(y));
3. 감소()
Reduce 메소드는 스트림의 요소를 단일 값으로 줄이는 데 사용됩니다. 축소 메소드는 BinaryOperator를 매개변수로 사용합니다.
List number = Arrays.asList(2,3,4,5); int even = number.stream().filter(x->x%2==0).reduce(0,(ans,i)-> ans+i);
여기서 ans 변수에는 초기값으로 0이 할당되고 여기에 i가 추가됩니다.
메모: Intermediate Operations는 Lazy Evaluation 개념을 기반으로 실행되며, 이는 모든 메소드가 다음 메소드로 이동하기 전에 고정된 값(터미널 작업)을 반환하도록 보장합니다.
자바 스트림의 예
자바
// Java program to demonstrate> // the use of stream in java> import> java.util.*;> import> java.util.stream.*;> class> Demo {> > public> static> void> main(String args[])> > {> > // create a list of integers> > List number = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> );> > // demonstration of map method> > List square> > = number.stream()> > .map(x ->x * x)> > .collect(Collectors.toList());> > // create a list of String> > List names = Arrays.asList(> > 'Reflection'> ,> 'Collection'> ,> 'Stream'> );> > // demonstration of filter method> > List result> > = names.stream()> > .filter(s ->s.startsWith(> 'S'> ))> > .collect(Collectors.toList());> > > System.out.println(result);> > // demonstration of sorted method> > List show> > = names.stream()> > .sorted()> > .collect(Collectors.toList());> > > System.out.println(show);> > // create a list of integers> > List numbers> > = Arrays.asList(> 2> ,> 3> ,> 4> ,> 5> ,> 2> );> > // collect method returns a set> > Set squareSet> > = numbers.stream()> > .map(x ->x * x)> > .collect(Collectors.toSet());> > > System.out.println(squareSet);> > // demonstration of forEach method> > number.stream()> > .map(x ->x * x)> > .forEach(y ->System.out.println(y));> > // demonstration of reduce method> > int> even> > = number.stream()> > .filter(x ->x %> 2> ==> 0> )> > .reduce(> 0> , (ans, i) ->ans + i);> > System.out.println(even);> > }> }> |
산출
[4, 9, 16, 25] [Stream] [Collection, Reflection, Stream] [16, 4, 9, 25] 4 9 16 25 6
Java Stream의 중요 사항/관찰 사항
- 스트림은 소스와 함께 결합된(파이프라인된) 0개 이상의 중간 메서드와 설명된 메서드에 따라 소스에서 얻은 개체를 처리하는 터미널 메서드로 구성됩니다.
- 스트림은 개체의 원래 값을 변경하지 않고 파이프라인 방법에 따라 요소를 계산하는 데 사용됩니다.