List <-> array <-> stream

java8~ 2023. 5. 19. 08:58

1. array <-> stream

int array -> Arrays.stream(.. )으로 바꾸면 intStream()이 되므로 Integer stream으로 바꾸려면 .boxed()를 써야한다. 


    //cards {1,2,2, 7, 9, 9, 8} 중에 pair들 빼고 최대 값구하기
    public static int solutions(int[] cards) {


        Map<Integer, Long> counting = Arrays.stream(cards).boxed()  //intStream()을  stream()으로 바꿔야함
                .collect(Collectors.groupingBy( i->i, Collectors.counting()))  //<Integer, Long>
                ;

        Integer ret = counting.entrySet().stream()
                .filter( e -> e.getValue() == 1)
                .map( e -> e.getKey())
                .max( Integer::compare ) //need STUDY max(Comparator 임)
                .orElse(-1); //.intValue();

        //TEST code: 둘다 오류임 : study필요
//        Integer ret = Arrays.stream(cards).boxed()
//                .max(Comparator.comparingInt());
//                .max(Integer.compare());

        return ret;
    }

ERROR FIX:  Inreger.compare() => Integer::compare     & add.   .orElse(-1) 

Integer::compare 대신에 Comparator.comparing(e -> e) 도 됨. 

Posted by yongary
,