본문 바로가기

JAVA

스트림1 스트림의 특징

스트림(stream)

-다양한 데이터소스를 표준화된 방법으로 다루기 위한것 ( 컬렉션 , 배열 등)

Stream은 Collection 의 진화형

 

List<Integer> list = Arrays.asList(1,2,3,4,5)

Stream<Integer> intStream = list.stream(); //컬렉션

//.stream() 메서드로 list를 stream 으로 만든다.

 

Stream<String> strStream = stream.of(new String[]{"a","b","c"}) // 매열

Stream<Integer> everStream = stream.iterate(0, n -> n+2);

Stream<Double> randomStream = stream.generate(Math::random);

IntStream intStream = new Random(),ints(5); //난수 스트림

 

스트림 사용하는 순서

1.stream만들기

2.중간연산 n번

3.최종연산(결과)

 

스트림이 제공하는 기능 - 중간연산 , 최종연산

중간연산 : 연산결과가 스트림인 연산 , 반복적으로 사용가능

최종연산 : 연산결과가 스트림이 아닌 연산 , 단 한번만 적용가능 (스트림 요소를 소모)

 

ex) stream.distinct().limit(5).sorted().forEach(systeam.out.println);

.distinct().limit(5).sorted() : 중간연산

.forEach(systeam.out.println); : 최종연산

 

//메소드 자체는 DB 용어와 비슷

String[] strArr = {"dd" , "aaa" , "CC" , "cc" , "b" };

Stream<String> stream = stream.of(strArr); //스트림만들기

Stream<String> filteredStream = stream.filter(); // 요소 걸러내기

Stream<String> distinctedStream = stream.distinct(); //중복 제거

Stream<String> sortedStream = stream.sort(); //정렬

Stream<String> limitedStream = stream.limit(5); //스트림 자르기

int total = stream.count(); //stream요소의 갯수 새기

 

스트림의 특징

1.스트림은 데이터소스로부터 데이터를 읽기만 할 뿐 변경하지 않는다.

List<Integer> list = Arrays.asList(3,1,5,4,2);

List<Integer> sortedList = list.stream().sorted().collec(collector.toList()); //정렬 후 새로운 List에 저장

 

*stream은 원본 데이터는 그대로 두고 새로운 결과값을 반환한다.

 

2.Stream는 Iterator처럼 일회용이다, (다시 필요하면 다시 스트림을 생성해야한다)

strStream.forEach(system.out.println); //모든 요소를 화면에 출력

int numOfstr = strStream.count(); // 위 연산에서 스트림을 다써버렷기 때문에 여기서 오류가 난다.

 

3.최종견산 전까지 중견연산이 수행되지 않는다 . -지연된 연산

IntStream intStream = new Random().ints(1,46);//1에서 46범위의 무한스트림

int Stream. intStream.distinct().limit(6).sotred()//중간연산 ,중복제거 , 잘라내기 , 정렬 

                              .forEach(i -> system.out.println(i)); //최종연산 출력

 

4.Stream은 작업을 내부반복으로 처리한다

for(String str:strList) {

system.out.println(str)

}

위작업을 아래와 같이 처리

Stream.forEach(system.out.println())

 

5.스트림의 작업을 병렬로 처리 - 병렬스트림(멀티쓰레드)

Stream<String> strStream = stream.of("dd" , "aaa" , "cc" ,"CC" , "b");

int sum = strStream.parallel() // 병렬 스트림으로 전환(속성만 변경)

                  .mapToInt(s -> s.length()).sum(); //모든 문자열 길이의 합

 

기본형 스트림 IntStream , LongStream ,DoubleStream

오토박싱 , 언박싱의 비효율이 제거됨 (Stream <Integer> 대신 IntStream 사용)  

숫자와 관련된 유효한 메서드를 Stream<T> 보다 더 많이 제공

미리 데이터 타입 제공 Stream을 사용 (기본형 데이터일 경우 한정)

'JAVA' 카테고리의 다른 글

스트림3 스트림의 최종연산  (0) 2023.03.15
스트림2 스트림의 중간연산  (0) 2023.03.15
람다6 메소드 참조  (0) 2023.03.15
람다5 함수 두개를 연결 andThan  (0) 2023.03.15
람다4 Predicate 람다 조건식  (0) 2023.03.15