○Stream
▷data-processing operstions을 지원하는 Element Sequence
▷배열/컬렉션의 요소들을 쉽고 효율적으로 맵핑/필터링 가능 (filter, map, reduce, find, match, sort, ...)
▶Collection과의 차이점
▶Collection
▷모든 요소에 접근시에 반복문 (for/for-each)을 이용해서 순회해야 한다.
▶Stream
▷stream 내의 메소드를 이용해서 데이터들을 조작 가능하다.
▶생성
▶exploit values를 통해 생성
▷Stream.of(...)의 Static method를 통해 생성
▶Arrays를 통해 생성
▷Arrays.stream(array)
▷Stream.of(array)
▶Collection을 통해 생성
▷Collection.stream
▶파일 -> java.nio.file.Files 의 많은 Static methods
▷Files.lines : 줄단위로 Stream을 만듬.
▶iterate
▷매개변수 2개 : 시작, 증감 (limit, takeWhile 등으로 조건)
▷매개변수 3개 : 시작, 조건, 증감
▶generate
▷function reference를 통해 return 값으로 Stream을 만든다.
▷Lambda expression을 지원한다.
▶Operation Methods
▷대부분의 연산에 대해 Pipelining이 적용된다. (연산의 결과 = Stream, 입력으로 사용 가능)
▶Filtering
▷조건에 따라 Stream의 일부 element들을 가져온다.
▶filter
▷조건을 만족하는 element들의 stream을 반환
▷조건 : boolean을 리턴하는 함수형 인터페이스, 람다식으로 표현 가능
▶distinct
▷모든 요소들을 Unique하게 한다. (겹치는 element 제거)
▶takeWhile
▷조건을 불만족하는 element 전까지의 element들로 이루어진 Stream을 반환한다.
▶dropWhile
▷처음 조건이 만족한 이후의 element들로 이루어진 Stream을 반환한다.
▶limit
▷Stream에서 처음 몇개의 element만으로 새로운 Stream을 만든다.
▶sorted
▷Stream을 정렬함.
▷매개변수 없음 -> 정렬 객체에 Comparable 구현 필요
▷매개변수 Comparator -> 매개변수에서 Comparator 정의 필요
▷역순 -> .reversed()
▶map
▷Stream의 모든 element에 대해 적용되어, return 값으로 element를 덮어씌운다.
▶forEach
▷Stream의 모든 element에 대해 적용되지만, element 값에는 영향을 주지 않는다.
▶Matching
▷모든/일부 element가 조건을 만족하는지 확인한다.
▷조건 : boolean을 리턴하는 함수형 인터페이스, 람다식으로 표현 가능
▶anyMatch
▷하나라도 조건을 만족함.-> true 반환
▶allMatch
▷모두 조건을 만족함 (true)-> true 반환
▶noneMatch
▷모두 조건을 만족하지 않음 (false) -> true 반환
▶Finding
▷Stream에 element가 하나라도 있으면, 그 중 하나를 return한다.
▷Optional<T>의 형태로 return한다. -> isPresent() : 존재하는가? / get() : 값 접근
▶findAny
▷Stream의 무작위 element를 반환한다.
▶findFirst
▷Stream의 첫 element를 반환한다.
▶collect
▷stream을 List로 변환
▷Stream을 String으로 변환 (구분자, prefix, suffix)
▶count
▷Stream의 element 개수를 샌다.