Java stream - 将列表排序为列表的 HashMap

Java stream - Sort a List to a HashMap of Lists

假设我有一个 Dog class。

里面有一个 Map<String,String>,其中一个值是 Breed

public class Dog {
    String id;
    ...
    public Map<String,String>
}

我想获得 MapLists:

HashMap<String, List<Dog>> // breed to a List<Dog>

我宁愿使用 Stream 而不是迭代它。

我该怎么做?

你可以用 groupingBy 来完成。

假设您的输入是 List<Dog>Dog class 中的 Map 成员称为 map,Breed 存储为“品种”键:

List<Dog> dogs = ...
Map<String, List<Dog>> map = dogs.stream()
     .collect(Collectors.groupingBy(d -> d.map.get("Breed")));

上面的好答案可以通过方法参考符号进一步改进:

List<Dog> dogs = ...
Map<String, List<Dog>> map = dogs.stream()
     .collect(Collectors.groupingBy(Dog::getBreed)); 
List<Map<String,Object>> inAppropWords = new ArrayList<>();
    Map<String, Object> s = new HashMap<String, Object>();
    s.put("type", 1);
    s.put("name", "saas");
    Map<String, Object> s1 = new HashMap<String, Object>();
    s1.put("type", 2);
    s1.put("name", "swwaas");
    Map<String, Object> s2 = new HashMap<String, Object>();
    s2.put("type", 1);
    s2.put("name", "saqas");
    inAppropWords.add(s);
    inAppropWords.add(s1);
    inAppropWords.add(s2);
    
    Map<Integer, List<String>> t = inAppropWords.stream().collect(Collectors.groupingBy(d -> AppUtil.getInteger(d.get("type")),Collectors.mapping(d -> String.valueOf(d.get("name")),Collectors.toList())));
    System.out.println(t);