반응형
자바에서 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 반환
반응형
'Language > Java' 카테고리의 다른 글
자바 Stream int float double로 반환방법 (0) | 2021.10.27 |
---|---|
자바 Map.Entry 사용방법 정리 (0) | 2021.10.27 |
자바 스트림(Stream) 에서 ::의 의미는? (0) | 2021.10.26 |
자바 List에서 특정 값이 몇개 들었는지 확인방법 (0) | 2021.10.26 |
자바 배열에서 특정 값이 몇개 들었는지 확인방법 (0) | 2021.10.26 |
댓글