지도가 Map<String, Integer>
입니다. 정렬 후에 값을 정렬하고 첫 번째 값의 키를 검색해야합니다.값에서 java.util.map의 키를 얻는 방법
나는과 같은 작업을 수행했습니다. 이제 값이 정렬됩니다. 정렬 된 값의 첫 번째 요소의 키는 어떻게 가져올 수 있습니까?
나는 이것을 달성하는 더 좋은 방법을 환영 할 것이다.
지도가 Map<String, Integer>
입니다. 정렬 후에 값을 정렬하고 첫 번째 값의 키를 검색해야합니다.값에서 java.util.map의 키를 얻는 방법
나는과 같은 작업을 수행했습니다. 이제 값이 정렬됩니다. 정렬 된 값의 첫 번째 요소의 키는 어떻게 가져올 수 있습니까?
나는 이것을 달성하는 더 좋은 방법을 환영 할 것이다.
당신은 TreeSet<Map.Entry>
보다는 TreeSet<Integer>
(기존 맵에서 entrySet
로 충전), 그리고 Comparator<Map.Entry>
를 사용하는 것이 좋습니다. 그런 다음 Comparator<Map.Entry>
구현에서 값을 기준으로 비교하십시오. 그런 다음 키와 값이 서로 연관되어 있습니다.
'TreeSet'의 생성자가 오직 하나를 취할 수 있기 때문에 어떻게'Comparator
@erictesting : 비교 자로 구성한 다음 향상된 'for' 루프에서 반복적으로'entrySet '에서 추가합니다. 예 : (건설 후)'for (Map.Entry entry : originalMap.entrySet()) {treeSet.add (entry); }' –
귀하의 요구 사항은 잘못 정의되어 있습니다. 두 개의 키가 동일한 값으로 매핑되는 경우 - 둘 중 어느 키를 검색해야합니까?
당신이 가진지도에서 주어진 최선의 결과는 values()
이 아닌 entrySet()
을 사용하는 것입니다. 그런 다음 Entry
개체를 값순으로 정렬하고 적절한 키를 검색 할 수 있습니다.
그러나 Map
을 먼저 "반대 방향"으로 유지하는 것이 훨씬 쉬울 것입니다. 첫 번째 데이터를 채우는 것과 동시에이 데이터를 채우는 경우 두 번째 Map
을 사용하여 '값'에서 '키'를 빠르게 검색 할 수 있습니다. 이런 식으로 뭔가 :
Map<String, Integer> originalMap = new HashMap<String, Integer>();
Map<Integer, String> reverseLookup = new HashMap<Integer, String>();
// Populate both maps at the same time, with the same data (but reversed)...
for (Integer i : originalMap.values()) {
System.out.println(reverseLookup.get(i));
}
어떻게 정렬 된 값의 첫 번째 요소의 키를받을 수 있나요.
가장 효율적인 방법은 아니지만이 방법을 정렬 된 Set
의 첫 번째 요소와 함께 호출 할 수 있습니다. 이 방법은 Map
에 null이 아닌 값이 있다고 가정합니다.
private String getKeyForValue(Integer value, Map<String, Integer> map) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
if (entry.getValue() == value) {
return entry.getKey();
}
}
throw new IllegalArgumentException("The value " + value + " was not found in the map.");
}
Map<String, Integer> map = new HashMap<String,Integer>();
Set<Integer> set = new TreeSet<Integer>(map.values());
Iterator iter = set.iterator();
Integer firstValue = (Integer) iter.next();
String firstKey = null;
for(String key : map.keySet())
{
if(map.get(key) == firstValue)
{
firstKey = key;
break;
}
}
어떻게 당신이 * 값이 * 하나 이상의 * 키 * 매핑되는 경우를 처리 하시겠습니까? 지도에서 키는 고유하지만 값은 보장되지 않습니다. – vegemite4me