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

java 8将具有相同键和值的映射分组,并生成一个键-值对

廉鸿运
2023-03-14

我有一个方法fetchConfigScont(),它返回列表

结果如下:

                    {
                        "web_id": "abc",
                        "count": 1
                    },
                    {
                        "web_id": "xyz",
                        "count": 1
                    },
                    {
                        "web_id": "pqr",
                        "count": 1
                    }

我们还有另一个方法fetchWebSiteScont(),它也会以相同的格式返回响应。

web_id是键,它的值是所有者名。count是另一个键,它的值是类型int

                    {
                        "web_id": "abc",
                        "count": 2
                    },
                    {
                        "web_id": "xyz",
                        "count": 3
                    },
                    {
                        "web_id": "pqr",
                        "count": 4
                    }

我们有一个ArrayList类型的所有者列表

List<String> listOfOwners = ["abc","xyz","pqr"];

我想收集所有这些信息,并创建如下结果:

result:[
    {"owner": "abc",
    "ownerPresence":{
    "configCount":1,
    "websiteCount":2
    },
    {"owner": "xyz",
    "ownerPresence":{
    "configCount":1,
    "websiteCount":3
    },
    {"owner": "pqr",
    "ownerPresence":{
    "configCount":1,
    "websiteCount":4
    }]

我不确定我怎么能在Java8做到这一点。


共有1个答案

鞠侯林
2023-03-14
  1. 将地图的初始列表重新映射为Map
static Map<String, Integer> convert(List<Map<String, Object>> list) {
    return list
        .stream()
        .collect(Collectors.toMap(
            m -> (String) m.get("web_id"),
            m -> (Integer) m.get("count")
        ));
}

List<Map<String, Object>> configs  = fetchConfigsCount();
List<Map<String, Object>> websites = fetchWebsitesCount();

Map<String, Integer> configMap  = convert(configs);
Map<String, Integer> websiteMap = convert(websites);
class Pojo {
    String owner;
    Map<String, Integer> ownerPresence;
    // boilerplate: constructor(s), getters/setters
}
List<String> listOfOwners = Arrays.asList("abc","xyz","pqr");

List<Pojo> result = listOfOwners
    .stream()
    .map(owner -> new Pojo(
        owner,
        Map.of(
            "configCount",  configMap.get(owner),
            "websiteCount", websiteMap.get(owner)
        )
    ))
    .collect(Collectors.toList());

 类似资料:
  • 我会从我想达到的目标开始 意图 该软件在for循环中解析XML数据。处理数据的 for 循环将持续到 50(因为我得到了 50 个不同的结果)。我最初所做的是,-方法解析整个XML数据并将其保存到TextViews中并显示它。但现在我想添加一个启动画面,只要数据加载就会显示。 XML文件像任何其他普通XML文件一样构建,因此当我通过for循环时,键总是相同的,但值不同。 方法 我已经做的是创建一个

  • 问题内容: 使用Hibernate,可以创建一个组合ID,其中要映射到该ID的列之一可以为空值吗? 这是为了处理具有唯一键的旧表,该键可以具有空值,但不能具有主键。 我意识到我可以只向表中添加一个新的主键列,但是我想知道是否有任何方法可以避免这样做。 问题答案: 否。主键不能为null。

  • 我有两个哈希要合并。它们看起来像这样: 第二个散列看起来像: 我想合并这两个散列数组,结果如下所示: 有没有一种简单的方法来合并这两个哈希,或者我必须逐个遍历哈希并在另一个哈希中找到该键?

  • 我有一个具有相同键值uid的多维数组。我想把它转换成子数组通过限制Foreachloop.you可以看到两个uid有值100和两个uid有值5465 我想得到这样的阵列。 我可以不使用foreach循环得到结果吗?

  • 假设我们有一个键-值映射的数据结构,其中键本身也是一个键-值映射。例如: 现在,假设我们要查询此映射中与键的某个键值子集匹配的所有顶级键/值。示例: 我们的查询是“给我所有key值,其中key包含,它将返回第一个和第三个值将返回所有同时具有和的键值,生成第二个值。显然,我们可以在每一个查询的完整地图中进行搜索,但我正在寻找比这更高效的方法。 我四处查看了一下,但是找不到一个高效、易用的C解决方案。

  • 在这个问题中,我必须有一个带有键和字符串值的映射,以查看多个键是否映射到同一个值。换句话说,我的方法应该返回true,如果没有两个键映射到相同的值,则返回false。我尝试将所有地图放在一个集合中,检查每个元素,看看是否有两个相同值的副本;然而,这似乎对我不起作用。如有任何建议,将不胜感激,谢谢。 提示: 编写一个方法isUnique,该方法接受从字符串到字符串的映射作为参数,如果没有两个键映射到