получить максимальный размер набора из HashMap - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть хэш-карта <Integer, Set<Integer>>.

Я хочу получить набор максимального размера с использованием операции потока Java.

Вот мой пример:

public class Example {

     public static void main( String[] args ) {
         Map<Integer,Set<Integer>> adj = new HashMap<>();
         Set<Integer> set1 = Stream.of(1,2,3).collect(Collectors.toSet());
         Set<Integer> set2 = Stream.of(1,2).collect(Collectors.toSet());
         adj.put(1,set1);
         adj.put(2,set2);
     }
}

Я пробовал это:

 Collections.max(adj,Comparator.comparingInt(Set::size));

, но я получаю ошибку компиляции, потому что метод size () в интерфейсе Set не является статическим.

Обычно мы должны получить 3 в качестве установленного максимального размера.

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

мы должны получить 3 в качестве установленного максимального размера.

Чтобы получить максимальный размер Set на карте, вы можете использовать:

int maxSetSize = adj.values()
        .stream()
        .max(Comparator.comparingInt(Set::size))
        .map(Set::size)
        .orElse(0);
0 голосов
/ 04 декабря 2018

Вы не можете использовать Map<Integer,Set<Integer>> с Collection.max.как это определено как получение коллекции.

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)

Итак, чтобы заставить ее работать, выполните:

Collections.max(adj.values(), Comparator.comparingInt(Set::size));

или поток:

adj.values()
   .stream()
   .max(Comparator.comparingInt(Set::size));
...