그 외 _ https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
람다식을 소개하면서 Stream API를 소개 하지 않을 수 없겠지요. 람다식을 추가하면서 같이 추가된 Stream API를 살펴봅시다. 이번 포스팅은 람다식이 주요 내용이었기 때문에 간단하게 사용법만 알아봅시다.
먼저 Stream API를 사용하려면 stream을 얻어와야 합니다. 얻는 방법은 다음과 같습니다.
Arrays.asList(1,2,3).stream(); // (1)Arrays.asList(1,2,3).parallelStream(); // (2)
콜렉션 관련 객체라면 stream을 얻어올 수 있습니다. (1)번 방법은 일반적인 stream을 가져오는 것이고 (2)번 방법은 병렬로 stream을 가져옵니다.
실제로 얻어온 stream에 연산을 해봅시다. 주요하게 쓰이는 몇가지 API만 살펴봅시다.
3.2.1. forEach
stream의 요소를 순회해야 한다면 forEach를 활용할 수 있습니다.
Arrays.asList(1,2,3).stream() .forEach(System.out::println); // 1,2,3
3.2.2. map
stream의 개별 요소마다 연산을 할 수 있습니다. 아래의 코드는 리스트에 있는 요소의 제곱 연산을 합니다.
Arrays.asList(1,2,3).stream() .map(i -> i*i) .forEach(System.out::println); // 1,4,9
3.2.3. limit
stream의 최초 요소부터 선언한 인덱스까지의 요소를 추출해 새로운 stream을 만듭니다.
Arrays.asList(1,2,3).stream() .limit(1) .forEach(System.out::println); // 1
3.2.4. skip
stream의 최초 요소로부터 선언한 인덱스까지의 요소를 제외하고 새로운 stream을 만듭니다.
Arrays.asList(1,2,3).stream() .skip(1) .forEach(System.out::println); // 2,3
3.2.5. filter
stream의 요소마다 비교를 하고 비교문을 만족하는 요소로만 구성된 stream을 반환합니다.
Arrays.asList(1,2,3).stream() .filter(i-> 2>=i) .forEach(System.out::println); // 1,2
3.2.6. flatMap
stream의 내부에 있는 객체들을 연결한 stream을 반환합니다.
Arrays.asList(Arrays.asList(1,2),Arrays.asList(3,4,5),Arrays.asList(6,7,8,9)).stream() .flatMap(i -> i.stream()) .forEach(System.out::println); // 1,2,3,4,5,6,7,8,9
3.2.7. reduce
stream을 단일 요소로 반환합니다.
Arrays.asList(1,2,3).stream() .reduce((a,b)-> a-b) .get(); // -4
이 코드는 조금 설명이 필요할 것 같습니다. 우선, 첫번째 연산으로 1과 2가 선택되고 계산식은 앞의 값에서 뒤의 값을 빼는 것이기 때문에 결과는 -1이 됩니다. 그리고 이상태에서 -1과 3이 선택되고 계산식에 의해 -1-3이 되기 때문에 결과로 -4가 나옵니다. 뒤로 추가 요소가 있다면 차근차근 앞에서부터 차례대로 계산식에 맞춰 계산하면 됩니다.
3.2.8. collection
아래의 코드들은 각각의 메소드로 콜렉션 객체를 만들어서 반환합니다.
Arrays.asList(1,2,3).stream() .collect(Collectors.toList());Arrays.asList(1,2,3).stream() .iterator();