STREAM?

yookyungmin·2023년 4월 5일
0

STREAM

  • 다양한 데이터 소스를 표준화 된 방법으로 다루기 위한 것
    스트림을 이용하면, 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다.

스트림 변환 방법

List<Integer> list = Arrays.asList(1,2,3,4,5);
  Stream<Integer> inStream = list.steam();
  Stream<String> strStream = Stream.of(new String[]{"a","B","c"}); // 배열
  Stream<Integer> evenStream = Stream.iterate(0, n->n+2);//0,2,4,6
  Stream<Double> randomStream = Stream.generate(Math::random); // 람다식
  InStream inStream = new Random().ints(5)//난수 스트림

스트림이 제공하는 기능

중간연산과 최종연산
중간연산-연산 결과가 스트림인 연산. 반복적으로 적용가능
최종여산 - 연산 결과가 스트림이 아닌 연산. 다한번만 적용 가능(스트림의 요소를 소모)

stream.distinct().limit(5).sorted().forEach(System.out::println)

스트림의 특징

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

List<Integer> list = Arrays.asList(3,1,5,4,2);
List<Integer> sortedlist = list.stream(.sorted) //list 정렬
.collect(Collectore.toList()); //새로운 리스트에 저장
System.out.println(list); //[3, 1, 5, 4, 2]
System.out.println(sortedLst); //[1, 2, 3, 4, 5] 

스트림은 Iterator처럼 일회용이다.(필요하면 다시 스트림을 생성해야함)

strStream.forEach(System.out::println);//최종연산)
int numOfStr = strStream.count(); //에러 스트림 닫혀있음

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

InStream inStream = new Random().ints(1,46);//무한스트림
intStream.distinct().limit(6).sorted()//중간연산
.forEach(i>System.out.println(i+",")); //최종연산

스트림은 작업을 내부 반으로 처리한다.

for(String str : strList) System.out.println(str);
stream.forEach(System.out::println);

스트림의 작업을 병렬로 처리- 병렬스트림

Stream<String> strStream = Stream.of("dd", "aaa", "CC", "cc", "b");
  int sum = strStream.parallel().//병렬 스트림으로 전환(속성만변경)
  mapToInt(s->s.length()).sum();//모든문자열길이합

기본형 스트림- IntStream, LongStream,DoubleStream
오토박싱 & 언박싱의 비효율 제거
어떠한 스트림으로 변환하면
기본형이 참조형으로 바뀌어서 저장된다(오토박싱)
참조형이 기본형으로 바뀐다 (언박싱)
숫자와 관련된 유용한 메서드를

Stream<T> 보다 더 많이 제공

0개의 댓글