[Java] 스트림과 병렬 처리 ②

kiteB·2022년 2월 28일
0

Java2

목록 보기
17/36
post-thumbnail

[ 스트림의 종류 ]

자바 8부터 새로 추가된 java.util.stream 패키지에는 스트림 API들이 포진하고 있다. 패키지 내용을 보면 BaseStream 인터페이스를 부모로 해서 자식 인터페이스들이 다음과 같은 상속 관계를 이루고 있다.

  • BaseStream 인터페이스에는 모든 스트림에서 사용할 수 있는 공통 메소드들이 정의되어 있기만 하다.
    코드에서 직접적으로 사용되지는 않는다.
  • 하위 스트림인 Stream, IntStream, LongStream, DoubleStream이 직접적으로 이용되는 스트림이다.
    • Stream은 객체 요소를 처리하는 스트림이고
    • IntStream, LongStream, DoubleStream은 각각 기본 타입인 int, long, double 요소를 처리하는 스트림이다.

이 스트림 인터페이스의 구현 객체는 다양한 소스로부터 얻을 수 있다.
주로 컬렉션과 배열에서 얻지만, 다음과 같은 소스로부터 스트림 구현 객체를 얻을 수도 있다.


1. 컬렉션으로부터 스트림 얻기

다음 예제는 List<Student> 컬렉션에서 Stream<Student>를 얻어내고 요소를 콘솔에 출력한다.

  • FromCollectionExample
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;

public class FromCollectionExample {
    public static void main(String[] args) {
        List<Student> studentList = Arrays.asList(
                new Student("김", 10),
                new Student("이", 20),
                new Student("박", 30)
        );

        Stream<Student> stream = studentList.stream();
        stream.forEach(s -> System.out.println(s.getName()));
    }
}
  • 실행 결과
김
이
박

2. 배열로부터 스트림 얻기

  • FromArrayExample
import java.util.Arrays;
import java.util.stream.IntStream;
import java.util.stream.Stream;

public class FromArrayExample {
    public static void main(String[] args) {
        String[] strArray = {"김", "이", "박"};
        Stream<String> strStream = Arrays.stream(strArray);
        strStream.forEach(a -> System.out.print(a + ", "));
        System.out.println();


        int[] intArray = {1, 2, 3, 4, 5};
        IntStream intStream = Arrays.stream(intArray);
        intStream.forEach(a -> System.out.print(a + ", "));
        System.out.println();
    }
}
  • 실행 결과
김, 이, 박, 
1, 2, 3, 4, 5,

3. 숫자 범위로부터 스트림 얻기

IntStream()의 rangeClosed() 메소드를 이용해서 1부터 100까지의 합을 구할 수 있다.
rangeClosed() 메소드는 첫 번째 매개값에서부터 두 번째 매개값까지 순차적으로 제공하는 IntStream을 리턴한다.

참고로 IntStream의 또 다른 range() 메소드도 동일한 IntStream을 리턴하는데, 두 번째 매개값은 포함하지 않는다.

  • FromIntRangeExample
import java.util.stream.IntStream;

public class FromIntRangeExample {

    public static int sum;

    public static void main(String[] args) {
        IntStream stream = IntStream.rangeClosed(1, 100);
        stream.forEach(a -> sum += a);
        System.out.println("총합: " + sum);

    }
}
  • 실행 결과
총합: 5050

[ 참고자료 ]

이것이 자바다 책

profile
🚧 https://coji.tistory.com/ 🏠

0개의 댓글