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)
메서드를 이용해서 변환해봄
현재 코드가 너무 복잡해서 리팩토링실행함
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();
}
}
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 변환 글