반응형

자바 스트림이란 리스트나, 배열 같은 저장 요소를 for(이터레이터)를 사용하지 않고, 람다식이라는 함수적 스타일을 활용해서 데이터 처리를 할 수 있습니다. 이런 이야기만 듣고 보기에는 이해하기 어려우니 코드를 먼저 살펴 보겠습니다.

기본 샘플)

 

List<String> list = Arrays.asList("홍길동", "신용권", "감자바");

// Iterator 이용
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String name = iterator.next();
    System.out.println(name);
}

System.out.println();

// Stream 이용
Stream<String> stream = list.stream();
stream.forEach(name -> System.out.println(name));

Iterator를 사용하면 반복문을 사용하여 하나씩 접근 하였습니다.

하지만, stream을 활용하면 반복문 없이 리스트 데이터를 처리할 수 있습니다. 위의 내용은 단순히 리스트 출력을 하였는데 아래 코드는 조금더 복작합 작업을 진행합니다.

 

샘플2)

List<Student> list = Arrays.asList(
    new Student("홍길동", 90),
    new Student("신용권", 92)
);

Stream<Student> stream = list.stream();
stream.forEach(s -> {
    String name = s.getName();
    int score = s.getScore();
    System.out.println(name + "-" + score);
});

list문의 stream을 열어서 s라는 변수의 각각의 객체를 받아서 처리를 진행합니다.

 

스트림의 장점은 병렬 처리를 통해서 더 빠른 처리를 할 수 있습니다. 병렬 처리는 하나의 코어로 처리하는 것이 아닌 다수의 코어로 작업을 나눠서 진행하기 때문에 단순 반복문 처리보다 더 빠른 속도를 낼 수 있습니다.

 

샘플3)

List<String> list = Arrays.asList("홍길동", "신용권", "감자바", "람다식", "박병렬");

// 순차 처리
Stream<String> stream = list.stream();
stream.forEach(ParallelExample :: print);

System.out.println();

// 병렬 처리
Stream<String> parallStream = list.parallelStream();
parallStream.forEach(ParallelExample :: print);

병렬 처리를 하면 더 빠른 속도를 낼 수 있지만, 병렬 처리 후 마지막에 합쳐지기 때문에 순서는 보장 받을 수 없습니다.

이점은 주의를 해주셔야 겠습니다.

순서 보장을 못받음

 

 

코드 내용)

이것이 자바다 (신용권의 Java 프로그래밍 정복)

반응형

+ Recent posts