Language/Java

Stream

원2 2022. 11. 7. 14:39
728x90
반응형

스트림 API의 동작 흐름

스트림 생성 -> 스트림 중개 연산 (변환) -> 스트림 최종 연산(사용)

 

컬렉션

자바에서 제공하는 모든 컬렉션의 최고 상위 조상인 Collection 인터페이스에는 stream() 메소드가 정의 되어 있음

따라서 Collection 인터페이스를 구현한 모든 List 와 Set 컬렉션 클래스에서도 stream() 메소드로 스트림 생성 가능

//        컬렉션
        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < 10; i++) {
            list.add(i);
        }

        Stream<Integer> stream = list.stream();
        stream.forEach(System.out::println);

 

 

배열

 

전체 배열 뿐만 아니라 특정 부분의 스트림을 생성 가능

//        배열
        String[] arr = new String[]{"원","투","쓰리","포"};

        Stream<String> st = Arrays.stream(arr);
        st.forEach(e -> System.out.print(e + " "));

        Stream<String> st2 = Arrays.stream(arr, 1, 3);
        st2.forEach(item -> System.out.print("\n" + item));
원 투 쓰리 포 
투
쓰리

 

가변 매개변수

of() 를 사용하여 가변 매개변수를 받아 스트림 생성가능

// 가변 매개변수
Stream<Double> st = Stream.of(4.2, 2.5, 3.1, 1.9);
st.forEach(System.out::println);

 

지정된 범위의 연속된 정수

 

// 지정된 범위의 연속된 정수
IntStream st1 = IntStream.range(1,4);
// range 는 시작 정수를 포함하지만, 마지막 정수는 포함하지 않음
st1.forEach(item -> System.out.print(item + " "));
System.out.println();
// rangeClosed 는 마지막 정수까지도 포함
IntStream st2 = IntStream.rangeClosed(1,4);
st2.forEach(item -> System.out.print(item + " "));
1 2 3 
1 2 3 4

 

특정 타입의 난수들

// 특정 타입의 난수들
// 매개변수를 전달받지 않으면 크기가 정해지지 않은 무한 스트림을 반환
// limit() 사용하여 스트림 제한해야함
IntStream st = new Random().ints(4);
st.forEach(System.out::println);
1503997572
-1372347350
-2050951186
-992093205

 

빈 스트림

Stream<Object> stream = Stream.empty();
System.out.println(stream.count());
0

 

728x90
반응형

'Language > Java' 카테고리의 다른 글

스트림의 중개 연산  (0) 2022.11.07
Quartz 스케줄러 링크  (0) 2022.03.23
subList  (0) 2022.02.22
Double.isInfinite  (0) 2022.02.18
StringUtils  (0) 2022.02.17
확장 for 문  (0) 2022.01.05