如何在Java8中查找值为List的映射的最大值?

时间:2019-01-07 06:13:15

标签: java collections java-8 hashmap java-stream

我有一个Map

Map<String, ArrayList<Students>> studentsInClass

我可以通过遍历Student并将其分配给Map并进行比较来找到具有最大int个类的类。

我想知道什么是最佳的Java 8方法。我想获得List中所有值中最高的Map大小。

2 个答案:

答案 0 :(得分:3)

  

我只想在地图上获得最大的列表大小

如果我正确理解了您的意思,那么您应该尝试以下操作:

int maxSize = studentsInClass.values()
                             .stream()
                             .map(List::size)
                             .max(naturalOrder())
                             .orElse(0);

答案 1 :(得分:0)

Stream具有max方法,可用于根据max元素的任何属性来查找Stream的{​​{1}}元素

Stream

或(无默认值):

String largestClassName = 
    studentsInClass.entrySet()
                   .stream()
                   .max(Comparator.comparingInt(e -> e.getValue().size()))
                   .map(Map.Entry::getKey)
                   .orElse(null); // default value for when the Map is empty

或者,如果您需要最大类别的人数(而不是该类别的名称):

Optional<String> largestClassName = 
    studentsInClass.entrySet()
                   .stream()
                   .max(Comparator.comparingInt(e -> e.getValue().size()))
                   .map(Map.Entry::getKey);

或(无默认值):

int maxClassSize = 
    studentsInClass.values()
                   .stream()
                   .mapToInt(List::size)
                   .max();
                   .orElse(0); // default value for when the Map is empty