Упомянутая вами версия 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 .