-
[JAVA] 컬렉션 간의 변환 방법Java/Collection(컬렉션) 2024. 10. 4. 22:53반응형
목차
자바 프로젝트를 진행하다 보면 배열, 리스트, 셋, 맵 등의 컬렉션 타입들을 상호 변환해야 하는 경우가 자주 발생합니다. 이번 문서에서는 이러한 변환 작업을 어떻게 수행할 수 있는지에 대해 다뤄보겠습니다.1. 배열을 List로 변환하기
배열을 List로 변환할 때 가장 간단한 방법은 Arrays.asList() 메서드를 사용하는 것입니다./** * 배열을 List로 변환 * * @param array 변환할 배열 * @param <T> 배열의 원소 타입 * @return 변환된 List */ public static <T> List<T> arrayToList(T[] array) { return Arrays.asList(array); }
단위 테스트@DisplayName("arrayToList: Integer 배열을 List로 변환") @Test void testArrayToListInteger() { // given Integer[] array = {1, 2, 3, 4, 5}; // when List<Integer> result = CollectionConverter.arrayToList(array); // then List<Integer> expected = Arrays.asList(1, 2, 3, 4, 5); assertEquals(expected, result); }
2. 배열을 Set으로 변환하기
배열을 Set으로 변환하는 방법은 배열을 먼저 리스트로 변환한 후 HashSet 생성자에 전달하는 것입니다./** * 배열을 List로 변환 후 Set으로 변환 * * @param array 변환할 배열 * @param <T> 배열의 원소 타입 * @return 변환된 Set */ public static <T> Set<T> arrayToSet(T[] array) { return new HashSet<>(Arrays.asList(array)); }
순서가 보장된 Set이 필요하다면 LinkedHashSet을 사용할 수 있습니다.public static <T> Set<T> arrayToOrderedSet(T[] array) { return new LinkedHashSet<>(Arrays.asList(array)); }
단위 테스트
@DisplayName("arrayToSet: Integer 배열을 List로 변환 후 Set으로 변환") @Test void testArrayToSetInteger() { // given Integer[] array = {1, 2, 3, 4, 5}; // when Set<Integer> result = CollectionConverter.arrayToSet(array); // then Set<Integer> expected = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5)); assertEquals(expected, result); }
3. List를 Set으로 변환하기
List를 Set으로 변환하는 방법은 파라미터로 리스트를 받는 HashSet 생성자를 사용하는 것입니다./** * List를 Set으로 변환 * * @param list 변환할 List * @param <T> List의 원소 타입 * @return 변환된 Set */ public static <T> Set<T> listToSet(List<T> list) { return new HashSet<>(list); }
단위 테스트@DisplayName("listToSet: Integer List를 Set으로 변환") @Test void testListToSetInteger() { // given List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // when Set<Integer> result = CollectionConverter.listToSet(list); // then Set<Integer> expected = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5)); assertEquals(expected, result); }
4. List를 배열로 변환하기
리스트를 배열로 변환할 때는 List 인터페이스의 toArray 메서드를 사용합니다. 배열의 타입을 지정하여 새로운 배열을 생성합니다./** * List를 배열로 변환 * * @param list 변환할 List * @param array 배열로 변환할 객체 * @param <T> List의 원소 타입 * @return 변환된 배열 */ public static <T> T[] listToArray(List<T> list, T[] array) { return list.toArray(array); }
단위 테스트
@DisplayName("listToArray: Integer List를 배열로 변환") @Test void testListToArrayInteger() { // given List<Integer> list = Arrays.asList(1, 2, 3, 4, 5); // when Integer[] result = CollectionConverter.listToArray(list, new Integer[list.size()]); // then Integer[] expected = {1, 2, 3, 4, 5}; assertArrayEquals(expected, result); }
5. Map의 Key들을 List로 변환하기
맵의 키를 List로 변환하는 방법은 Map의 keySet 메서드를 사용하여 키의 집합을 가져온 다음, 이를 새로운 리스트 객체에 전달하는 것입니다./** * Map의 Key들을 List로 변환 * * @param map 변환할 Map * @param <K> Map의 Key 타입 * @param <V> Map의 Value 타입 * @return Key로 이루어진 List */ public static <K, V> List<K> mapKeysToList(Map<K, V> map) { return new ArrayList<>(map.keySet()); }
@DisplayName("mapKeysToList: Map의 Integer Key들을 List로 변환") @Test void testMapKeysToListInteger() { // given Map<Integer, String> map = Map.of(1, "one", 2, "two", 3, "three"); // when List<Integer> result = CollectionConverter.mapKeysToList(map); // then List<Integer> expected = Arrays.asList(1, 2, 3); assertAll( () -> assertTrue(result.containsAll(expected)), () -> assertTrue(expected.containsAll(result)) ); }
6. Map의 Value들을 List로 변환하기
맵의 값을 List로 변환할 때는 values 메서드를 사용하여 값을 수집한 후, 이를 리스트로 변환합니다./** * Map의 Value들을 List로 변환 * * @param map 변환할 Map * @param <K> Map의 Key 타입 * @param <V> Map의 Value 타입 * @return Value로 이루어진 List */ public static <K, V> List<V> mapValuesToList(Map<K, V> map) { return new ArrayList<>(map.values()); }
단위 테스트@DisplayName("mapValuesToList: Map의 Integer Value들을 List로 변환") @Test void testMapValuesToListInteger() { // given Map<String, Integer> map = Map.of("a", 1, "b", 2, "c", 3); // when List<Integer> result = CollectionConverter.mapValuesToList(map); // then List<Integer> expected = Arrays.asList(1, 2, 3); assertAll( () -> assertTrue(result.containsAll(expected)), () -> assertTrue(expected.containsAll(result)) ); }
7. Map의 Entry들을 List로 변환하기
맵의 엔트리를 List로 변환하는 방법은 entrySet 메서드를 사용하여 엔트리 집합을 가져온 후 리스트로 변환하는 것입니다./** * Map의 Entry들을 List로 변환 * * @param map 변환할 Map * @param <K> Map의 Key 타입 * @param <V> Map의 Value 타입 * @return Entry로 이루어진 List */ public static <K, V> List<Map.Entry<K, V>> mapEntriesToList(Map<K, V> map) { return new ArrayList<>(map.entrySet()); }
단위 테스트@DisplayName("mapEntriesToList: Map의 Integer Entry들을 List로 변환") @Test void testMapEntriesToListInteger() { // given Map<Integer, String> map = Map.of(1, "one", 2, "two", 3, "three"); // when List<Map.Entry<Integer, String>> result = CollectionConverter.mapEntriesToList(map); // then List<Map.Entry<Integer, String>> expected = Arrays.asList( Map.entry(1, "one"), Map.entry(2, "two"), Map.entry(3, "three") ); assertAll( () -> assertTrue(result.containsAll(expected)), () -> assertTrue(expected.containsAll(result)) ); }
8. Set을 List로 변환하기
Set을 List로 변환할 때는 리스트 생성자에 셋을 전달합니다./** * Set을 List로 변환 * * @param set 변환할 Set * @param <T> Set의 원소 타입 * @return 변환된 List */ public static <T> List<T> setToList(Set<T> set) { return new ArrayList<>(set); }
순서가 보장된 Set이 필요하다면 LinkedHashSet을 사용할 수 있습니다.public static <T> List<T> orderedSetToList(Set<T> set) { return new ArrayList<>(new LinkedHashSet<>(set)); }
단위 테스트
@DisplayName("setToList: Integer Set을 List로 변환") @Test void testSetToListInteger() { // given Set<Integer> set = new HashSet<>(Arrays.asList(1, 2, 3, 4, 5)); // when List<Integer> result = CollectionConverter.setToList(set); // then List<Integer> expected = Arrays.asList(1, 2, 3, 4, 5); assertAll( () -> assertEquals(expected.size(), result.size()), () -> assertTrue(result.containsAll(expected)), () -> assertTrue(expected.containsAll(result)) ); }
소스 코드는 Github Repository- https://github.com/tychejin1218/blog/tree/main/java-collection 프로젝트를 참조하세요.
반응형'Java > Collection(컬렉션)' 카테고리의 다른 글
[JAVA] Java 11에서 추가된 String 메서드 사용 방법 (0) 2024.10.28 [JAVA] 자주 사용되는 Java String 메서드 (0) 2024.10.28 [JAVA] 맵 검색하기 (0) 2024.10.04 [JAVA] 리스트의 중복 요소 제거하기 (0) 2024.09.27 [JAVA] 리스트 회전하기 (0) 2024.09.27