Нужна помощь в понимании использования коллекций в лямбда-выражениях - PullRequest
0 голосов
/ 12 июня 2018

У меня есть часть лямбда-выражения, пришедшего из Map <'String, Double>, которое я не совсем понимаю.

.collect(Collectors.toMap(Map.Entry::getKey,
              Map.Entry::getValue, (String, Double) -> String,
              LinkedHashMap::new);

Вот что я думаю, что это означает:

Map.Entry::getKey is stating variable String,
Map.Entry::getValue is stating variable Double

Не совсем понимаю, что (String, Double) -> String, LinkedHashMap :: new.Это создает LinkedHashMap с String в качестве ключевого значения?Но тогда зачем нужен Double in (String, Double)?

Еще один пример, который является частью Map

.collect(Collectors.groupingBy(String::toLowerCase, TreeMap::new, Collectors.counting());

then followed by...

.collect(Collectors.groupingBy(entry -> 
entry.getKey().charAt(0), TreeMap::new, Collectors.toList());

Что они на самом деле означают?

1 Ответ

0 голосов
/ 12 июня 2018

Упомянутая вами версия toMap использует функцию keyMapper, которая используется для извлечения ключей карты, следовательно, Map.Entry::getKey, valueMapper функция, которая используется для извлечения значений карты, следовательно, Map.Entry::getValue- функция слияния, используемая для разрешения коллизий в случае, если есть два равных ключа, следовательно, (String, Double) -> String (который в основном говорит: «Если два заданных ключа равны, сохраняют значение первого и отбрасывают второй») и, наконец, LinkedHashMap::new утверждает, что результат сокращения должен храниться в экземпляре LinkedHashMap.

Второй предоставленный вами фрагмент кода:

.collect(Collectors.groupingBy(String::toLowerCase,
                  TreeMap::new, 
            Collectors.counting());

Указывает, что элементы потока будутЕсли сгруппировать строки в нижнем регистре, результаты сокращения будут собраны в TreeMap, а значения карты будут подсчитывать количество вхождений каждой строки в потоке.Таким образом, полученная карта будет иметь вид TreeMap<String, Long>.

Третий приведенный вами фрагмент кода:

.collect(Collectors.groupingBy(entry -> entry.getKey().charAt(0), 
          TreeMap::new, 
          Collectors.toList());

Указывает, что элементы потока будут сгруппированы по первому символуключи ввода, результат сокращения будут накапливаться в TreeMap, а значения - это список элементов потока.Таким образом, полученная карта представляет собой TreeMap<Character, List<T>>, где T - это тип элементов в потоке.


Кроме того, вы можете проверить Collectors API и поэкспериментировать сэто и / или см. Руководство по сборщикам Java 8 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...