본문 바로가기
Language/Java

자바 Map Value 로 Key 찾는 방법

by wakestand 2021. 10. 26.
반응형

자바에서 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<String> list = new LinkedList<>();

for(Map.Entry<String, Integer> mp : map.entrySet()) {
	if(mp.getValue().equals("찾는값")) {
		list.add(mp.getKey());
	}
}

System.out.println("반환 : " + list); // list 반환
반응형

댓글