티스토리 뷰

Java

Map key와 value 치환

토마's 2019. 6. 28. 14:12

안녕하세요. 오늘은 여타 프로젝트를 진행하면서 여러 컬렉션 중에서 Map을 종종 사용할 때가 있습니다. 제가 프로젝트를 진행하면서 Map 데이터를 받아와 key와 value 데이터를 치환(즉, 바꿔서) 사용하고 싶은 니즈가 있었습니다. 그래서 고민을 하면서 검색 도중 자바 1.8버전 부터 지원 되는 Lambda식을 사용하여 아주 수월하게 치환을 할 수 있는 방법을 알게 되었고, 오늘은 간단한 예제를 통해서 Map의 key와 value를 치환하는 방법에 대해서 포스팅해보려고 합니다.

 

public static void main(String[] args) {

        List list1 = new ArrayList();
        list1.add(10);
        list1.add(20);
        list1.add(30);

        List list2 = new ArrayList();
        list2.add(20);
        list2.add(30);
        list2.add(40);

        List list3 = new ArrayList();
        list3.add(10);
        list3.add(40);
        list3.add(50);

        Map<Integer, List> map = new HashMap<Integer, List>();
        map.put(1, list1);
        map.put(2, list2);
        map.put(3, list3);

        System.err.println("origin map : " + map);

        // values의 중복 데이터 제거 후 list로 반환
        List values = map.values().stream()
                .flatMap(List::stream).distinct().collect(Collectors.toList());

        System.err.println("values : " + values);

        // map의 키와 value를 치환하는 작업 수행
        Map<Integer, List> resultMap = values.stream()
                .collect(Collectors.toMap(Function.identity(), data -> map.entrySet().stream()
                .filter(entry -> entry.getValue().contains(data))
                .map(Map.Entry::getKey)
                .collect(Collectors.toList())));

        System.err.println("result map : " + resultMap);
    }

위의 코드를 보기면 기본적으로 자료형이 Integer인 리스트 3개를 만들었고 각각을 map에 담은 후, 해당 map의 key와 value의 값을 중복 제거 후, 치환하는 것을 볼 수 있습니다.

 

해당 코드를 실행하시면, 다음과 같은 결과를 확인 할 수 있습니다.

자바 1.8 버전 이후로 다음과 같이 stream을 사용해 간단하게 map의 key 값과 value 값을 변경하는 방법에 대해서 포스팅 했습니다. 그럼 이것으로 포스팅을 마치도록 하겠습니다.