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

按多个字段分组的流:,分析映射的嵌套映射的输出[重复]

伍心水
2023-03-14
@Getter
@Setter
@AllArgsConstructor
class SampleAction {
    private String grouping;
    private String category;
    private String actionType;
    private String details;
    private String moreDetails;
    private String etc;
}
java prettyprint-override">List<SampleAction> items = new ArrayList<SampleAction>() {{
    add(new SampleAction("Group1", "Cat1", "Type1", "details1", "", "etc"));
    add(new SampleAction("Group2", "Cat1", "Type1", "details2", "", "etc"));
    add(new SampleAction("Group1", "Cat1", "Type2", "details3", "", "etc"));
    add(new SampleAction("Group1", "Cat2", "Type1", "details4", "", "etc"));
    add(new SampleAction("Group2", "Cat2", "Type2", "details5", "", "etc"));
    add(new SampleAction("Group2", "Cat2", "Type2", "details6", "", "etc"));
    add(new SampleAction("Group2", "Cat3", "Type1", "details7", "", "etc"));
}};
items.stream()
   .collect(Collectors.groupingBy(SampleAction::getGrouping,
            Collectors.groupingBy(SampleAction::getCategory,
            Collectors.groupingBy(SampleAction::getActionType))));

这看起来有点吓人。最好的办法是什么?输出真的需要这种复杂类型吗?

共有1个答案

何峰
2023-03-14

如果您不想处理这种嵌套映射,可以创建一个组合键来分组:

Map<String,List<SampleAction>> map =
    items.stream()
          .collect(Collectors.groupingBy(sa -> sa.getGrouping () + '/' + 
                                               sa.getCategory() + '/' + 
                                               sa.getActionType()));

当然,只要您想在映射中搜索值,就必须创建一个复合键。

例如:

List<SampleAction> list = map.get (aGroup + '/' + aCategory + '/' + anActionType);
 类似资料:
  • 假设我有这些实体: null

  • 我想映射到产品字段,而不创建类 应该如何序列化和反序列化?

  • 问题内容: 我正在尝试将结果分组,以便将它们按类别分组。 上面的代码创建了聚合,但是我遇到了一个问题,其中 带有连字符的字符串 被分隔并放入了自己的“ Bucket”中。 从我已阅读的内容中,我需要更改映射设置,以便不分析类别,但是我不确定如何执行此操作。写入Elasticsearch或阅读时完成了吗?究竟如何设置? 问题答案: 要使用Java API应用Elasticsearch映射, 步骤1)

  • 我试图收集一个列表的结果,并将它们组织成一个地图,其中的值是一个地图: 我得到错误,因为对于列表中的不同值是相同的。 映射中包含的值应为: 当我尝试会删除其中一个条目

  • 我正在使用弹性搜索和Spring数据弹性。并尝试使用多重搜索。问题是在使用类字段搜索时,它不适用于嵌套字段。我的映射如下所示 我有一个带有searchQuery的endpoint,比如: 问题是查询不适用于嵌套字段。有什么建议吗? 使现代化 事实上,嵌套对象可以查询为 有没有两个类似的问题

  • 我有以下两门课: : : 我希望进行流操作,以便: 将映射到中的 的和分别合并到和中,对于所有具有相同id的s 为此,我编写了以下一段代码: 它的工作和输出如下: 但我相信有一种更好的方式可以达到同样的效果。任何一个指针都很好。