You can get a single key via
Integer max=mapGroup.entrySet().stream().max(Map.Entry.comparingByValue()).get().getKey();
but unfortunately, there is no built-in function for getting all equivalent maximums.
The simplest, straight-forward solution is to find the maximum value first and retrieve all keys mapping to that value afterwards:
private List<Integer> testStreamMap(Map<Integer, Long> mapGroup) {
if(mapGroup.isEmpty())
return Collections.emptyList();
long max = mapGroup.values().stream().max(Comparator.naturalOrder()).get();
return mapGroup.entrySet().stream()
.filter(e -> e.getValue() == max)
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
Solutions for getting all maximum values of a stream in a single pass, are discussed in “How to force max() to return ALL maximum values in a Java Stream?”. You will see that single-pass solutions are much more complicated and not worth the effort if your input is an ordinary Map
(e.g. HashMap
), which can be iterated multiple times cheaply.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…