지도에서 최대 값과 키를 연결하는 가장 쉬운 방법은 무엇입니까?
최대 값에 해당하는 키를 원할 때 Collections.max (someMap)이 최대 키를 반환한다고 생각합니다.
답변
기본적으로 “현재 알려진 최대 값”과 연관된 키를 모두 기억하면서 맵의 항목 세트를 반복해야합니다. (또는 물론 둘 다 포함하는 항목입니다.)
예를 들면 다음과 같습니다.
Map.Entry<Foo, Bar> maxEntry = null;
for (Map.Entry<Foo, Bar> entry : map.entrySet())
{
if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0)
{
maxEntry = entry;
}
}
답변
완전성을 위해 여기에 자바 -8 그것을하는 방법
countMap.entrySet().stream().max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1).get().getKey();
또는
Collections.max(countMap.entrySet(), (entry1, entry2) -> entry1.getValue() - entry2.getValue()).getKey();
또는
Collections.max(countMap.entrySet(), Comparator.comparingInt(Map.Entry::getValue)).getKey();
답변
이 코드는 모든 키를 최대 값으로 인쇄합니다
public class NewClass4 {
public static void main(String[] args)
{
HashMap<Integer,Integer>map=new HashMap<Integer, Integer>();
map.put(1, 50);
map.put(2, 60);
map.put(3, 30);
map.put(4, 60);
map.put(5, 60);
int maxValueInMap=(Collections.max(map.values())); // This will return max value in the Hashmap
for (Entry<Integer, Integer> entry : map.entrySet()) { // Itrate through hashmap
if (entry.getValue()==maxValueInMap) {
System.out.println(entry.getKey()); // Print the key with max value
}
}
}
}
답변
Java-8을 사용하는 간단한 하나의 라이너
Key key = Collections.max(map.entrySet(), Map.Entry.comparingByValue()).getKey();
답변
다음은 적절한 것을 정의하여 명시 적 추가 루프없이 직접 수행하는 방법입니다 Comparator
.
int keyOfMaxValue = Collections.max(
yourMap.entrySet(),
new Comparator<Entry<Double,Integer>>(){
@Override
public int compare(Entry<Integer, Integer> o1, Entry<Integer, Integer> o2) {
return o1.getValue() > o2.getValue()? 1:-1;
}
}).getKey();
답변
비어있는 경우지도에 최대 값이 없을 수 있으므로 선택 사항을 반환하는 답변 :
map.entrySet().stream().max(Map.Entry.comparingByValue()).map(Map.Entry::getKey);
답변
최대 값을 가진 모든 키를 얻는 Java 8 방법.
Integer max = PROVIDED_MAP.entrySet()
.stream()
.max((entry1, entry2) -> entry1.getValue() > entry2.getValue() ? 1 : -1)
.get()
.getValue();
List listOfMax = PROVIDED_MAP.entrySet()
.stream()
.filter(entry -> entry.getValue() == max)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
System.out.println(listOfMax);
또한 parallelStream()
대신 에 사용하여 병렬화 할 수 있습니다stream()
