2022-09-20 Stream.Collect 공부중 의문점

Crow·2022년 9월 20일
0

삽질

목록 보기
10/16
Map<String, List<Integer>> map = Stream.of(3, 4, 5, 6, 7, 8, 9, 10)
			.collect(Collectors.groupingBy((e) -> (e % 2) == 0 ? "짝수" : "홀수"));
		System.out.println(map);

해당 코드를 보면 Stream.of(3, 4, 5, 6, 7, 8, 9, 10)부분을 정수 배열을 입력받아서 재사용하고 싶다
이걸 고민해보자

Map<String, List<Integer[]>> map = Stream.of(num) .collect(Collectors.groupingBy(ints -> ints);
이런식으로 사용해보니 불가능한걸로 보인다

처음으로 돌아가서 배열에서 stream으로 변환하는 방법을 찾으라는 조언을 받음
그결과

Map<String, List<Integer>> map3 = Arrays.stream(num).boxed()
                .collect(Collectors.groupingBy(o -> (o % 2)==0 ? "짝수" : "홀수"));

에서 Arrays.stream(num)메서드를 이용해서 변환해봄

현재 코드가 너무 복잡해서 리팩토링실행함

before

package Java;

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class CollectStudy {
    public static void main(String[] args) {
        int[] i1 = new int[]{3, 4, 5, 6, 7, 8, 9, 10};
        GroupingBy(i1);
        System.out.println(a1(i1));
    }

    public static void GroupingBy(int[] num) {
        System.out.println(map);
        Map<String, List<Integer>> map3 = a1(num)
                .collect(Collectors.groupingBy(o -> (o % 2) == 0 ? "짝수" : "홀수"));
    }

    public static Stream<Integer> a1(int[] num) {

        return Arrays.stream(num).boxed();
    }
}

after

package Java;

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class CollectStudy {
    public static void main(String[] args) {
        GroupingByOddEven(new int[]{3,4,5,6,7,8,9,11});
        GroupingByOddEven(new int[]{11,12,13,14,15,16,17,18,19,20});
    }


    public static IntStream ArrayToStreamINTEGER(int[] num) {

        return Arrays.stream(num);
    }


    public static void GroupingByOddEven(int[] num) {
        Map<String, List<Integer>> map = ArrayToStreamINTEGER(num).boxed()
                .collect(Collectors.groupingBy(o -> (o % 2 == 0 ? "짝수" : "홀수")));
        System.out.println(map);

        Map<String, IntSummaryStatistics> map2 = ArrayToStreamINTEGER(num).boxed()
                .collect(Collectors.groupingBy((integer -> (integer % 2) == 0 ? "짝수" : "홀수"),
                        Collectors.summarizingInt(Integer::intValue)));
        System.out.println(map2);
    }


}

아직 만족하지는 못하지만 아까보단 훨씬 괜찬아짐
생각없이 코딩하지말고 항상 코딩보다 생각을 많이 해야겠음


참고
강사님,Array to stream 변환 글

profile
어제보다 개발 더 잘하기 / 많이 듣고 핵심만 정리해서 말하기 / 도망가지 말기 / 깃허브 위키 내용 가져오기

0개의 댓글