티스토리 뷰

Java+Spring/Java

[Java]Map.Entry 인터페이스

Vagabund.Gni 2023. 3. 29. 23:30
728x90
반응형

알고리즘 문제를 이리저리 돌려가며 풀다가 Map을 스트림으로 다룰 때의 자료형이 필요했다.

 

일단 인텔리제이에서 알려주는 대로 사용해서 문제를 풀고, 따라가며 공부하기.

 

Map.Entry<K, V>

 

소개부터 하자면 Map.Entry는 자바 컬렉션 프레임워크의 Map 인터페이스의 내부 인터페이스이다.

 

Map과 마찬가지로 키-값의 데이터를 저장하며, Map에서 .entrySet() 연산자를 호출하면 생성할 수 있다.

 

정확하게 말하자면 .entrySet()의 경우 이름 그대로 아래와 같은 Set을 생성하며,

Map<Integer, Integer> integerMap = new HashMap<>();

Set<Map.Entry<Integer, Integer>> set = integerMap.entrySet();

위 Set에 모든 엔트리 객체가 담겨있기 때문에 개별 Map.Entry를 제어하려면 그대로 스트림을 열면 된다.

 

아래와 같은 메서드를 제공하기 때문에 알고리즘에서 Map을 다룰 때 굉장히 유용하며,

 

  • getKey() - 해당 엔트리의 키 반환
  • getValue() - 해당 엔트리의 값 반환
  • setValue(V value) - 해당 엔트리의 값 변경
  • comparingByKey() - 키 값으로 비교(내부적으로 compareTo()를 이용한다)
  • comparingByValue() - 밸류 값으로 비교

키나 값 중 원하는 요소로 정렬을 하거나 최대, 최솟값을 쉽게 골라낼 수 있다.

 

추가로 예외처리 등을 위해 Map.Entry 객체를 직접 만들려 시도하면 딸려있는 모든 메서드를 구현해야 하는 상황에 처하는데,

 

이를 위한 Entry의 구현체인 SimpleEntry도 알아놓으면 유용할 듯하다.

 

내가 알고리즘에서 사용한 대략적인 코드는 아래와 같다.

Map.Entry<Integer, Integer> entry = integerMap.entrySet().stream()
	.filter(integerIntegerEntry -> integerIntegerEntry.getKey() < arr[finalI])
	.max(Map.Entry.comparingByValue())
	.orElse(new AbstractMap.SimpleEntry<>(0, 0));

어쨌거나 스트림.. 더 친해지자.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함