velog에서 이전한 글 입니다.

combination

    static List<List<Integer>> combination(List<Integer> list, List<Integer> result, int depth) {
        List<List<Integer>> r = new ArrayList<>();
        if (result.size() == depth) {
            r.add(result);
            return r;
        }
        for (int i = 0; i < list.size(); i++) {
            List<Integer> n_list = new ArrayList<>(list.stream().skip(i + 1).collect(Collectors.toList()));
            List<Integer> n_result = new ArrayList<>(result.stream().collect(Collectors.toList()));
            n_result.add(list.get(i));
            List<List<Integer>> rr = combination(n_list, n_result, depth);
            for (List<Integer> rrr : rr) {
                r.add(rrr);
            }
        }
        return r;
    }

list slice 복사 : list.stream().skip(i + 1).collect(Collectors.toList());
앞에서부터 skip 개수만큼 건너뛴다. 마지막 변환을 stream().toList() 로 가능한데 8은 안됨으로 Collectors 사용

 

add가능한 list를 위해 new ArrayList<>() 로 만든다.

int[] -> Integer[]

Integer[] n_nums = Arrays.stream(nums).boxed().toArray(Integer[]::new);

위 코드는 기존에 posting한 적 있지만 기억하자는 의미로

list sum

int sum = rr.stream().mapToInt(Integer::intValue).sum();

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

자바) ArrayList LinkedList 시간 비교 (23-07-06)  (0) 2023.07.13
자바) ArrayList Capacity (23-07-06)  (0) 2023.07.13
자바) 와일드카드 (23-05-30)  (0) 2023.07.13
자바) List (23-05-26)  (0) 2023.07.13
자바) enum, 열거형 (23-05-24)  (0) 2023.07.13