개발/Java & Kotlin

[Java] 람다와 스트림(2)

devhooney 2022. 6. 29. 08:56
728x90

자바의 정석 챕터 14를 읽고 정리

2. 스트림

2.1 스트림이란

- 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드들을 정의 해놓은 것.

- 코드의 재사용성을 높여줌.

String[] strArr = {"aaa", "bbb", "ccc"};
List<String> strList = Arrays.asList(strArr);

// 스트림 생성
Stream<String> strStream2 = Arrays.stream(strArr);
Stream<String> strStream1 = strList.stream();

// 다른 데이터 소스지만, 이를 정렬하고 출력하는 방법은 동일하다.
strStream1.sorted().forEach(System.out::println);
strStream2.sorted().forEach(System.out::println);

 

스트림은 데이터 소스를 변경하지 않는다.

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

 

스트림은 일회용이다.

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

 

스트림의 연산

- 스트림은 중간 연산, 최종 연산으로 분류할 수있다.

- 중간 연산은 연산결과를 스트림으로 반환하기 때문에 연속해서 중간 연산을 할 수 있다.

중간 연산 연산결과가 스트림인 연산. 스트림에 연속해서 중간 연산할 수 있음
최종 연산 연산결과가 스트림이 아닌 연산. 스트림의 요소를 소모하므로 단 한번만 가능

 

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

 

지연된 연산

- 스트림의 최종 연산이 수행되기 전까지 중간 연산은 수행되지 않는다.

 

728x90