Comment faire pour convertir une Liste<V> Map<K<V>>, avec Java 8 ruisseaux et personnalisé de la Liste et la Carte des fournisseurs?

Il est facile de convertir List<V> en Map<K, List<V>>. Par exemple:

public Map<Integer, List<String>> getMap(List<String> strings) {
   return
      strings.stream()
             .collect(Collectors.groupingBy(String::length));
}

Mais je veux le faire avec mon propre List et Map fournisseurs.

Je suis venu avec cette:

public Map<Integer, List<String>> getMap(List<String> strings) {
   return strings.stream()
       .collect(Collectors.toMap(
             String::length,
             item -> {List<String> list = new ArrayList<>(); list.add(item); return list;},
             (list1, list2) -> {list1.addAll(list2); return list1;},
             HashMap::new));
}

Question: Est-il plus facile, moins verbeux, ou de manière plus efficace de le faire? Par exemple, quelque chose comme ceci (qui ne fonctionne pas):

return strings.stream()
      .collect(Collectors.toMap(
            String::length,
            ArrayList::new,                    
            HashMap::new));

Et si j'ai seulement besoin de définir la List fournisseur, mais pas le Map fournisseur?

Il y a un groupingBy la surcharge de prendre un fournisseur de carte.
Il y a trois arg recueillir méthode sur le cours d'eau qui pourraient vous intéresser

OriginalL'auteur MarcG | 2016-11-23