0

我不认为它被称为“分组”,但我需要实现以下目标:我有课

class Person {
   String name;
   Set<String> groups;
}

我有一些人:

  1. 父亲 => {“工人”,“男人”}
  2. 母亲 => {“女人”}
  3. 儿子 => {"学生","男人"}
  4. 女儿 => {"学生","女人"}

因此,每个人都可以属于多个类别。我想得到以下映射:

"Worker" => {Father}
"Men" => {Father, Son}
"Student" => {Son, Daughter}
"Woman" => {Mother, Daughter}

现在我可以通过手动迭代每个人并将他们放到Map<String,List<Person>>

我正在尝试使用流(或 StreamEx)oneliner 找到更优雅的 wat,例如:

List<Persons> family= ...;
Map<String,List<Person>> groupped = family.stream().groupByMultipleAttributes(Person::getGroups)
4

1 回答 1

3

您可以生成所有关联的组和Persons 对,然后将它们收集groupingBy到 a 中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())));
于 2020-01-29T13:49:27.810 回答