스트림을 사용하면 내부 반복으로 네이티브 자바 라이브러리가 스트림 요소의 처리를 제어할 수 있다. 따라서 개발자는 컬렉션 데이터 처리 속도를 높이려고 따로 고민할 필요가 없다. 컴퓨터의 멀티코어를 활용해서 파이프라인 연산을 실행할 수 있다는 점이 중요한 특징이다. 7.1 병렬 스트림 컬렉션에 parallelStream을 호출하면 병렬 스트림이 생성된다. 병렬 스트림이란 각각의 스레드에서 처리할 수 있도록 스트림 요소를 여러 청크로 분할한 스트림이다. 따라서 모든 멀티코어 프로세서가 각각의 청크 처리를 할당할 수 있다. 병렬 실행이 무조건 빠른 것은 아니다. static long sum(int n) { long sum = 0; for (int i = 0; i < n; i++) { sum += 1; } re..
스트림
4.1 스트림이란 무엇인가 자바 8 API에 새로 추가된 기능 선언형으로 컬렉션 데이터 처리(DB에 질의하듯이) 어떻게 동작을 구현할지 지정할 필요 없이 ‘저칼로리의 요리만 선택하라’ 같은 동작의 수행을 지정할 수 있다. 멀티스레드 코드를 구헌 하지 않아도 데이터를 투명하게 병렬로 처리 가능 parallelStream() 여러 빌딩 블록 연산을 파이프 라인으로 연결해 가독성과 명확성을 유지하며 작성이 가능하다. filter(sorted, map collect)와 같은 연산은 고수준 빌딩 블록으로 이루어져 있어서 특정 스레딩 모델에 제한되지 않는다. (내부적으로 단일 스레드 모델에 사용할 수 있지만 멀티코어 아키텍처를 최대한 투명하게 활용할 수 있게 구현되어 있다.) 결과적으로 데이터 처리를 병렬화하면서 ..
스트림(Stream)이란 스트림은 자바8부터 추가된 기능으로 컬렉션이나 배열의 값을 하나씩 참조, 처리할 수 있게 해주는 반복자이다. 람다식을 사용해 간결하고 가독성 좋은 반복를 할 수 있고 둘 이상의 작업을 동시에 진행하는 병렬 처리가 가능하다는 장점도 있다. 예시를 살펴 보자. 1부터 10까지의 int 리스트에서 짝수만 골라서 가져와야 한다고 해보자. 일반 반복문 public static List notStream(List numbers) { List evenNumbers = new ArrayList(); for (Integer number : numbers) { if (number % 2 == 0) { evenNumbers.add(number); } } return evenNumbers; } 짝수를..