当前位置: 首页 > 知识库问答 >
问题:

Java流和分组:将对象放入多个组[重复]

史英睿
2023-03-14

我不认为这叫做“分组”,但我需要做到以下几点:我有课

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

我有一些人:

  1. 父亲=

所以,每个人都可以是多个类别的一部分。我想得到以下映射:

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

现在,我可以手动迭代每个人,并将他们放到地图上

我正试图找到一个更优雅的wat来使用流(或StreamEx)oneliner,比如:

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

共有1个答案

颛孙晗昱
2023-03-14

您可以生成所有相关的组对和Persons,然后使用groupingBy将它们收集到地图中:

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())));

 类似资料:
  • 我有一张清单,傻瓜 我想按类别分组,然后合计金额和价格。 现在我只需要用一个保存汇总的金额和价格的Foo对象替换String键。这就是我被困住的地方。我好像找不到办法。

  • 问题内容: 我发现了关于将两个数组列表交织在一起的类似问题,但在PHP中却是如此。我在面试中也被问到了这个问题,但无法解决,回到SO看看是否已经解决,但我只能找到这篇 论文 那么是否有任何指向伪代码或方法定义的指针? Big(O)限制:O(n)-时间成本和O(1)-空间成本 示例: a [] = a1,a2,…, a b [] = b1,b2,…,bn 将数组列表重新排列为a1,b1,a2,b2,

  • 这将产生以下结果 我所感兴趣的实际上只是上面结果中的列表,我希望理想地将其作为groupby操作的一部分来完成。我知道这是可以做到的,例如,通过循环结果映射结构。但是有没有一种方法可以使用流来实现它呢?

  • 问题内容: 我有类似以下内容: 例如100的集合,其中stackid可以使用不同的questionId复制。stackId和questionId之间的一对多关系 是否有一种 流式的 Java 8方式可以转换为以下结构: 这将是25个的集合,每个实例具有4个QuestionId的嵌套集合。 输入: 输出量 问题答案: Stream API的直接方法涉及2条Stream管道: 第一个创建一个临时的到。

  • 问题内容: var arrObj = [{a:1, b:2},{c:3, d:4},{e:5, f:6}]; 如何将其合并为一个obj? 问题答案: 如果您的环境支持,那么您可以像这样简洁地进行操作 ES5解决方案: 您可以使用这样的 此解决方案仅将的所有键及其值收集在中的每个对象中,最终将结果返回给我们。 这张支票 有必要确保我们在结果中不包括所有继承的可枚举属性。

  • 如何在两个属性之后对对象数组进行分组?在以下情况下是否可以使用减少? 例如:按国家和城市将以下数组分组,并对“年龄”属性求和: /*预期结果:*/