on
자바 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