Arrays 타입을 Collection 으로 변환해보기

구창회·2023년 5월 30일
0

자바 공부 중

목록 보기
7/10
  • int 형 데이터를 받는 배열을 Integer 타입의 List 로 어떻게 변환할 수 있을까?

  • 이것을 배워두면, 배열에서 모든 Collection 타입의 자료구조로 변환하기가 쉽기 때문에 한번 공부겸 글을 작성해보려 한다.


문제를 예로 들어서 풀어보자

int 배열 arr1 과 arr2 가 있다. 두 배열에 공통적으로 들어가는 원소를 배열로 가지는 int 배열을 출력해라! -> 교집합 구하기 문제

전략 세우기

  • HashSet 의 retainAll 함수를 사용하고 싶다! (교집합 구하기)
  • Collection 타입의 자료구조로 Arrays 들을 바꿔서 조작한 후에, 다시 Collection 에서 Arrays 로 돌려 놓는 과정이 필요하겠다!

코드로 구현한 부분

import java.util.HashSet;
import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr1, int[] arr2) {
        Integer[] arr1_n = Arrays.stream(arr1).boxed().toArray(Integer[]::new);
        Integer[] arr2_n = Arrays.stream(arr2).boxed().toArray(Integer[]::new);
        
        HashSet<Integer> set1 = new HashSet<>(Arrays.asList(arr1_n));
        HashSet<Integer> set2 = new HashSet<>(Arrays.asList(arr2_n));
        set1.retainAll(set2);

        int[] answer = Arrays.stream(set1.toArray(Integer[]::new)).mapToInt(i -> i).toArray();

        return answer;
    }
}

처음으로 Stream 을 써보았다. 매번 for 문으로 int to Integer, 반대로 하다가 stream을 쓰니깐 훨씬 편한 느낌이 들기도 한다.

스트림 공부를 해야겠다는 생각이 듬.

ps. 교집합 (retainAll), 차집합 (removeAll), 합집합 (addAll)

profile
백엔드 엔지니어 프로 지망생

0개의 댓글