자바 Map Value 로 Key 찾는 방법

자바 Map Value 로 Key 찾는 방법

반응형

자바에서 Map 타입에 데이터가 들어있을 경우

Key로 Value를 찾기는 쉽지만

Value로 Key를 찾기는 어려운데

이때 Stream을 사용해주면 for 문을 돌려가며

찾지 않아도 쉽게 찾을 수 있게 된다

(for 문 사용시에는 하단 참조)

예제 코드는 아래와 같은데 복사 붙여넣기 후

한글이 들어있는 부분만 변경해 주면

"찾는값" 에 해당하는 Key만 List 타입으로 받을 수 있게 된다

map명.entrySet().stream() .filter(entry -> Objects.equals(entry.getValue(), "찾는값")) .map(Map.Entry::getKey) .collect(Collectors.toList())

여기서 Stream이 이해가 가지 않을 수 있어

분해해서 하나씩 설명을 해 보자면

1. map명.entrySet.stream()

map의 Key를 모두 꺼내온 뒤 Stream 타입으로 변환

2. filter(entry -> Objects.equals(entry.getValue(), "찾는값"))

Key를 가지고 Value를 가져온 뒤 "찾는값"과 동일한 값만 가져옴(람다식)

3. map(Map.Entry::getKey)

2번에서 맞는 조건이었을 경우 Key를 가져옴

4. collect(Collectors.toList())

조건에 해당되는 Key를 List 형태로 만든 후 반환

마지막으로 Stream 이 아닌

for 문을 사용해서 Value로 Key를 찾고 싶다면

for 문을 돌려주면서

Map.Entry<데이터타입, 데이터타입> 으로

map 내용을 받아주면서 Value가 "찾는값" 이라면

해당 찾는값의 Key를 list에 추가하는 식으로 사용해주면 된다

예제 코드는 아래에 첨부했으니

이걸 복사 붙여넣기해서 사용해주면 된다

LinkedList list = new LinkedList<>(); for(Map.Entry mp : map.entrySet()) { if(mp.getValue().equals("찾는값")) { list.add(mp.getKey()); } } System.out.println("반환 : " + list); // list 반환

반응형

from http://wakestand.tistory.com/647 by ccl(A) rewrite - 2021-10-26 23:27:22