-
Stream 다시 공부Java & 배경지식/기본상식 2021. 5. 2. 15:43반응형
Stream을 사용하면서 깊게 생각하지 않고 간단하게 사용법만 사용하였다. 그러다가 Stream을 깊게 사용하려다가 막히는 내 모습을 보고
이대로는 안되겠다 싶어 다시한번 복습 겸 공부함
Steam 함수의 sorted, filter 등등의 코드는 위의 git 주소로 들어가서 확인
Stream이란?
한줄로 설명
다양한 데이터 소스를 표준화된 방법으로 다루기 위한 기능
/** * 아래의 코드를 실행시키게 된다면 <br /> * stream 안쪽에 있는 값이 들어가 있지 않을 것이다. * 그 이유는 스트림을 사용할라면 * 1. 스트림 만들기 * 2. 중간연상 * 3. 최종연산을 * 위 3가지의 조건을 만족시켜야 하는데 현재 1,2단계만 만족했기 때문이다. */ public void whatIsStream() { List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9); Stream<Integer> intStream = list.stream(); Stream<String> stringStream = Stream.of(new String[]{"a","b","c"}); Stream<Integer> eventStream = Stream.iterate(0, n -> n + 2).limit(10); Stream<Double> randomStream = Stream.generate(Math::random); IntStream randomIntStream = new Random().ints(5); System.out.println("intStream : " + intStream); System.out.println("stringStream : " + stringStream); System.out.println("eventStream : " + eventStream); System.out.println("randomStream : " + randomStream); System.out.println("randomIntStream : " + randomIntStream); }
중간연산이란?
- 연산결과가 스트림인 경우
- 중간연산은 n개를 가질 수 있다.
최종 연산이란?
- 연산결과가 스트림이 아닌경우
- 최종연산은 단 한번만 가능
- 스트림의 요소를 소모
중간연산과 최종연산을 코드로 표현
특징
- 스트림은 중간 데이터 소스로부터 읽기만 할 뿐 변경하지 않는다.
- 스트림은 lterator 처럼 일회용이다.
- 최종 연산 전까지 중간연상이 수행하지 않는다.
- 지연된 연상
public void StreamCharacteristic() { // 1. 스트림은 데이터 소스로부터 데이터를 읽기만 할뿐 변경하지 않는다. List<Integer> list = Arrays.asList(13, 21, 23, 74, 5,26, 71, 18, 96); List<Integer> sortedList = list.stream().sorted().collect(Collectors.toList()); System.out.println("list : " + list); System.out.println("sortedList : " + sortedList); // 2. 스트림은 lterator 처럼 일회용이다. List<Integer> list2 = Arrays.asList(13, 21, 23, 74, 5,26, 71, 18, 96); list2.stream().forEach(System.out::print); // 아래 코드는 에러가 발생이 된다. // 그 이유는 이미 위에서 forEach를 사용해서 최종연산을 행하였기 때문이다. //int count = list2.stream().count(); System.out.println(); // 3. 최정 연상 전까지 중간연산이 수행하지 않는다. IntStream intStream = new Random().ints(1,46); intStream.distinct().limit(6).sorted() .forEach(i -> System.out.println("i : " + i)); }
참고
반응형'Java & 배경지식 > 기본상식' 카테고리의 다른 글
HTTP와 HTTPS란? (0) 2021.03.11 Arrays.sort()와 Arrays.parallelSort() 내부 알고리즘 (0) 2020.08.09 자바 개발자가 알아야하는 25가지 상식! (1) 2020.07.19 바이트코드 조작 (0) 2020.06.07 클래스 로더 (0) 2020.06.07