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>
}
我想获得 Map
的 List
s:
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);
假设我有一个 Dog
class。
里面有一个 Map<String,String>
,其中一个值是 Breed
。
public class Dog {
String id;
...
public Map<String,String>
}
我想获得 Map
的 List
s:
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);