티스토리 뷰

스트림(Stream)

Stream : 배열, 컬렉션 등의 데이터를 하나씩 참조하여 함수형으로 처리하는 방법.

 

스트림의 요소

 

  1. 생성
    : 스트림의 생성.
     - 배열의 경우
    int arr1[] = new int[]{1, 2, 3};
    IntStream st1 = Arrays.stream(arr1);
    String arr2[] = new String[]{"a", "b", "c"};
    Stream st2 = Arrays.stream(arr2);

     - 컬렉션의 경우

    HashSet set = new HashSet();
    Stream st2 = set.stream();

     - Builder
    : 스트림에 데이터를 추가하는 연산. 모든 연산이 끝난 이후 .build()를 입력하여 종료.
    Stream st = Stream.builder().add(1).add(2).add(3).build();
    st.forEach(System.out::print);
    // output : 123

     - Generate
     : 스트림에 같은 데이터를 여러 개 복제하여 입력하는 연산. 람다식으로 작동하며, .limit()로 갯수 제한.
    Stream st = Stream.generate(() -> "duplicate ").limit(3);
    st.forEach(System.out::print);
    // output : duplicate duplicate duplicate

     - Iterate
    : Generate와 유사하지만, 초기값과 람다식 함수를 넣어 반복 연산을 하여 값을 입력. .limit()로 갯수 제한.
    Stream st = Stream.iterate(1, n -> n*2).limit(10);
    st.forEach(num -> System.out.printf("%4d", num));
    // output :    1   2   4   8  16  32  64 128 256 512

     - 기본 타입 스트림
    : 기본형을 range(또는 rangeClosed; 끝 범위 포함)로 범위를 정해 입력.
    IntStream st = IntStream.range(1, 6);	// 끝범위를 포함하지 않음. 1~5
    st.forEach(System.out::print);
    // output : 12345


  2. 중개 연산 (가공 단계)
    : 조건에 따라 데이터를 편집하는 단계. return값이 필요한 연산으로, 바로 출력을 할 것이 아니면 변수에 저장해야 함.
     - Filter
    : 조건에 맞는 데이터만 남도록 필터링하는 연산.
    IntStream st = IntStream.rangeClosed(1, 10);
    st = st.filter( n -> n%2 == 0);
    st.forEach(num -> System.out.printf("%d ", num));
    // output : 2 4 6 8 10

     - Mapping
    : 데이터 요소마다 함수식이 적용 된 값으로 변경하는 연산.
    IntStream st = IntStream.rangeClosed(1, 10);
    st = st.map(n -> n*2);
    st.forEach(num -> System.out.printf("%d ", num));
    // output : 2 4 6 8 10 12 14 16 18 20

     - Sorting : 데이터의 요소를 정렬하는 연산.
    int arr[] = {9, 7, 3, 2, 6};
    IntStream st = Arrays.stream(arr);
    st.sorted().forEach(System.out::print);
    // output : 23679


  3. 최종 연산 (출력 단계)
    : 마지막 연산을 통해 결과값을 추출하는 연산. sum, average, min, max, reduce forEach 등이 있다.
    : forEach를 제외하고는 .get()또는 .getAsInt(), .getAsDouble() 등으로 출력이 가능.
     - Reduce : 데이터의 누적 계산 값을 구하는 연산.
    int arr[] = {1, 2, 3, 4, 5};
    IntStream st = Arrays.stream(arr);
    System.out.println(st.reduce((x, y)-> x*y).getAsInt());
    // 1*2 = 2 -> 2*3 = 6 -> 6*4 = 24 -> 24*5 = 120

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함