Java 流和分组:将对象放入多个组
Java stream and groupping: put object to multiple groups
我不认为它叫做 "groupping" 但我需要实现以下目标:
我有 class
class Person {
String name;
Set<String> groups;
}
我有几个人:
- 父亲 => {"Worker", "Men"}
- 母亲 => {"Woman"}
- 儿子 => {"Student","Men"}
- 女儿 => {"Student","Woman"}
因此,每个人都可以属于多个类别。
我想获得以下映射:
"Worker" => {Father}
"Men" => {Father, Son}
"Student" => {Son, Daughter}
"Woman" => {Mother, Daughter}
现在我可以通过手动遍历每个人并将他们放到 Map<String,List<Person>>
来做到这一点
我正在尝试使用流(或 StreamEx)oneliner 找到更优雅的方法,例如:
List<Persons> family= ...;
Map<String,List<Person>> groupped = family.stream().groupByMultipleAttributes(Person::getGroups)
您可以生成所有关联的组和 Person
对,然后用 groupingBy
将它们收集到 Map
:
Map<String,List<Person>> groups =
family.stream()
.flatMap(p -> p.getGroups()
.stream()
.map(g -> new SimpleEntry<>(g,p)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));
我不认为它叫做 "groupping" 但我需要实现以下目标: 我有 class
class Person {
String name;
Set<String> groups;
}
我有几个人:
- 父亲 => {"Worker", "Men"}
- 母亲 => {"Woman"}
- 儿子 => {"Student","Men"}
- 女儿 => {"Student","Woman"}
因此,每个人都可以属于多个类别。 我想获得以下映射:
"Worker" => {Father}
"Men" => {Father, Son}
"Student" => {Son, Daughter}
"Woman" => {Mother, Daughter}
现在我可以通过手动遍历每个人并将他们放到 Map<String,List<Person>>
我正在尝试使用流(或 StreamEx)oneliner 找到更优雅的方法,例如:
List<Persons> family= ...;
Map<String,List<Person>> groupped = family.stream().groupByMultipleAttributes(Person::getGroups)
您可以生成所有关联的组和 Person
对,然后用 groupingBy
将它们收集到 Map
:
Map<String,List<Person>> groups =
family.stream()
.flatMap(p -> p.getGroups()
.stream()
.map(g -> new SimpleEntry<>(g,p)))
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue,
Collectors.toList())));