-
[JAVA8] Map to List, List to Map-2 / Map을 리스트로, 리스트를 맵으로-2Backend/JAVA&JAVA8 2022. 5. 5. 14:05이번 시간에는 저번 시간에 이어서 map을 list로 변환하는 코드들을 살펴보도록 하겠습니다.
번 포스팅은 이론적인 설명이 중심이 아닌 실무 중심의 포스팅이므로 바로 본론으로 들어가도록 하겠습니다.
우선 계속해서 가지고 놀 TestMap을 하나 만들어줍니다. 아래와 같이 만들어주시면 됩니다.
private static Map<Integer, String> getTestHashMap() { Map<Integer, String> map = new HashMap<>(); map.put(1, "first_phone"); map.put(2, "second_phone"); map.put(3, "third_phone"); map.put(4, "fourth_phone"); return map; }
Integer와 String으로 이루어진 Map을 하나 만들어주시고 value는 마음에 드는 글자들로 채워주시면 됩니다.
예제를 그대로 따라 해주셔도 무관합니다.
1. Map의 모든 key를 list로 반환(Java8 이전에 사용했었던 방법입니다)
Java8 이전에 사용했던 코드를 넣어둔 이유는 혹시나~! 아직도 아래와 같이 사용하는 분들이 많으실 것 같아서 기재해 두었습니다.
무슨 방법이든 큰 문제는 없다고 보이지만, 람다에 익숙해지기 위해서 추후에 소개할 3,4번의 방법이 더 좋으시지 않을까 하는 생각이 듭니다.
System.out.println("\n결과값: " + new ArrayList(getTestHashMap().keySet()));
결과는 아래와 같습니다.
결과값: [1, 2, 3, 4]
2. Map의 모든 value를 list로 반환(Java8 이전에 사용했었던 방법입니다)
System.out.println("\n결과값: " + new ArrayList(getTestHashMap().values()));
결과는 아래와 같습니다.
결과값: [first_phone, second_phone, third_phone, fourth_phone]
3. Map의 모든 key를 list로 반환
System.out.println("\n결과값: " + getTestHashMap() .keySet() .stream() .collect(Collectors.toList()) );
결과는 아래와 같습니다.
결과값: [1, 2, 3, 4]
4. Map의 모든 value를 list로 반환
System.out.println("\n결과값: " + getTestHashMap() .values() .stream() .collect(Collectors.toList()) );
결과는 아래와 같습니다.
결과값: [first_phone, second_phone, third_phone, fourth_phone]
5. 특정 value를 가진 요소 filtering
특정 값을 배제하고 싶으실 때에 사용하는 filter 메서드를 섞어서 사용하여 보겠습니다.
System.out.println("\n결과값: " + getTestHashMap() .values() .stream() .filter(x -> !"fourth_phone".equalsIgnoreCase(x)) .collect(Collectors.toList()) );
equalsIgnoreCase라는 메소드는 이전에도 몇 번씩 다루었었던 기능이기 때문에, 추가적으로 언급하진 않을게요.
결과는 아래와 같습니다.
결과값: [first_phone, second_phone, third_phone]
배제하고 싶은 값이 의도한 대로 배제되었습니다.
6. Map에서 여러 조건을 걸어서 두 개의 List로 반환
조금 난이도가 있다고 느끼실 수 있는 코드인데요.
막상 하나하나씩 보시면 괜찮으십니다.
List<Integer> resultSortedKey = new ArrayList<>(); List<String> resultValues = getTestHashMap() .entrySet() .stream() .sorted(Map.Entry.<Integer,String>comparingByKey().reversed()) .peek(e -> resultSortedKey.add(e.getKey())) .map(x -> x.getValue()) .filter(x -> !"fourth_phone".equalsIgnoreCase(x)) .collect(Collectors.toList()); System.out.println("\nkey list 결과값: "); resultSortedKey.forEach(System.out::println); System.out.println(""); System.out.println("\nvalue list 결과값: ") ; resultValues.forEach(System.out::println); System.out.println("");
(1) Map을 key 기준으로 정렬합니다.(실제로 정렬하실 일이 많으시겠죠)
(2) 1번의 결과를 key list에 반환
(3) 1번의 결과 중 value만 따로 value list에 반환
(4) 3번의 결과 중 filtering 할 조건들을 지정합니다.
긴 글 읽어주셔서 감사합니다!
'Backend > JAVA&JAVA8' 카테고리의 다른 글
Clean Code를 위해 지켜야 하는 몇 가지 사항들 (0) 2022.05.21 [JAVA8] group by (0) 2022.05.05 [JAVA8] Map to List, List to Map-1 / Map을 리스트로, 리스트를 맵으로-1 (0) 2022.05.05 [JAVA8] What is different things between findAny and findFirst? / findAny와 findFirst의 차이점에 대하여 (0) 2022.05.05 [JAVA8] What is different things between Map and Filter in Java8?-2 / Map과 Filter 그리고 차이점에 대하여-2 (0) 2022.05.05