Today
-
Yesterday
-
Total
-
  • Stream_2: 시작 연산자
    Language/Java 2023. 11. 25. 00:01

    컬렉션 요소

    Collection에 stream()이 정의되어 있다.
    그래서 Collection의 자손인 List와 Set을 구현한 클래스들은 모두 이 메서드로 스트림을 생성할 수 있다.

    List<String> list = Arrays.asList("a", "b", "b");
    Stream<String> s = list.stream();

    배열

    배열을 소스로 하는 스트림을 생성하는 메서드는 Arrays와 Stream에 static 메서드로 존재한다.

    Stream.of(T .. a,b,c) // 가변인자
    Stream.of(new String[]{"a", "b"})
    
    IntStream.of(1,2,3,4) // 가변인자
    IntStream.of(new int[]{1, 2, 3})
    
    // IntStream -> Stream<Integer>
    Stream<Integer> si = IntStream.of(1, 2, 3).boxed()
    
    Arrays.stream(배열)
    Arrays.stream(배열, 시작idx, 끝idx)

    람다식 _ iterate( ) , generate( )

    iterate()와 generate()는 람다식을 매개변수로 받아서,
    람다식에 의해 계산되는 값들을 요소로 하는 무한 스트림을 생성한다.

    // seed로 지정된 값에서 시작, 람다식 f에 의해 계산 된 결과를 다시 seed값으로 해서 계산 반복
    Stream<T> iterate(T seed , UnaryOperator<T> f)
    
    // iterate와 다르게 이전값을 이용하지 않음
    // 매개변수가 없는 람다식만을 허용함
    Stream<T> generate(Supplier<T> s)

    위 식을 이용해 얻은 결과를 기본형 타입의 참조변수로 다루기 위해서는 mapToInt()와 같은 메서드로 변환해야 한다.

    IntStream is = Stream.iterate(0, n->n+2).mapToInt(Integer::valueOf);

    특정 범위의 정수

    IntStream과 LongStream 은
    지정된 범위의 연속된 정수를 스트림으로 생성해서 변환하는 range()와 rangeClose()를 갖고 있다.

    range(int start, int end)    // end 미포함
    rangeClose(int start, int end)    // end 포함

    임의의 수

    Random 클래스에는 해당 타입의 난수들로 이루어진 스트림을 반환하는 메서드를 갖고 있다.
    무한 스트림 / 유한 스트림이 가능하다.

    IntStream ints() // 무한 스트림 _ limit() 메서드와 함께 사용을 권함
    IntStream ints(int size) // 유한 스트림 _ 크기가 size인 난수 스트림 반환
    IntStream ints(int begin, int end) // 유한 스트림 _ begin ~ end-1 범위의 난수 스트림 반환
    IntStream ints(int size, int begin, int end) // 유한 스트림 _ 크기가 size 이면서 begin ~ end-1 범위의 난수 스트림 반환
    
    LongStream longs()
    LongStream longs(long size)
    LongStream longs(long begin, long end)
    LongStream longs(long size, long begin, long end)
    
    DoubleStream doubles()
    DoubleStream doubles(double size)
    DoubleStream doubles(double begin, double end)
    DoubleStream doubles(double size, double begin, double end)

    이 스트림들의 난수 범위는 다음과 같다.

    Integer.MIN_VALUE    <=       ints()    <= Integer.MAX_VALUE
       Long.MIN_VALUE    <=      longs()    <= Long.MAX_VALUE
                  0.0    <=    doubles()    <  1.0

    빈 스트림 : null에 대처할 수 있음

    스트림에 연산을 수행한 결과가 하나도 없을 때,
    null을 반환하는 것보다 빈 스트림을 반환하는 것이 낫다.

    Stream empty = Stream.empty();
    long count = empty.count(); // 0 반환

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

    SQLite  (0) 2023.11.25
    Stream_3: 중간 연산자  (0) 2023.11.25
    Stream_1: 소개  (0) 2023.11.25
    자바의 정석 3판 _ 연습문제 02~03 오답 정리  (0) 2023.11.23
    코딩테스트용 프로젝트 템플릿!! 😆  (0) 2023.11.21

Designed by Tistory / Custom by 얼거스