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

Map键存在时添加新列表条目

孔俊捷
2023-03-14

假设我有Map

我想将其映射到映射

使用toMap()时,我将初始映射的ID更改为字符串(通过数据库调用),但不同的ID可以返回相同的字符串,因此可能存在重复。如果我正在收集的新地图的toMap中已经存在我的密钥,是否可以将我的ObjectOne以地图的格式添加到新地图的新列表条目中

我尝试了一些收藏家的东西。groupingBy()和收集器。mapping()但无法使其工作,很好奇是否有办法做到这一点

我现在得到的是以下解决方案,但我希望将其收集到map,而不必首先定义它:

  Map<String, List<Map<String, Object>>> giantMap = new HashMap<>();
   
  initalMap.forEach((id, object) -> {
      Code code = repository.getCodeById(id);
      giantMap.computeIfAbsent(code, ignore -> new ArrayList<>())
                        .add(object);
   });

共有1个答案

田嘉澍
2023-03-14

因此,我们假设有一些ID到类型为ObjectOne的对象的映射:map

通过数据库调用将键ID转换为某种Code类型,并且第一个映射的ObjectOne值只是使用C收集到另一个映射中ollectors.groupingByCollectors.mapping如最初预期的那样:

Map<ID, ObjectOne> initialMap = ...;

Map<Code, List<ObjectOne>> mapByCode = initialMap
        .entrySet()
        .stream() // Stream<Map.Entry<ID, ObjectOne>>
        .collect(Collectors.groupingBy(
            e -> repository.getCodeById(e.getKey()),
            Collectors.mapping(Map.Entry::getValue, Collectors.toList())
        ));

此外,可以迭代初始映射的keySet

// or using keySet()
Map<Code, List<ObjectOne>> mapByCode2 = initialMap
        .keySet()
        .stream() // Stream<ID>
        .collect(Collectors.groupingBy(
            repository::getCodeById,
            Collectors.mapping(initialMap::get, Collectors.toList())
        ));

 类似资料:
  • 问题内容: 晚间! 我有以下地图: 然后,我向其中添加了以下数据: 这给我留下了以下数据: 关键: 测试 值: 测试1,测试2,测试3 我的问题是,如何将新值添加到我现有的键上?因此,例如,如何将值“ Test 4”添加到键“ Tests”上。 谢谢。 问题答案: 只需从地图上获取列表,然后将元素添加到列表中即可: 关于您的代码,还有一些其他事项需要注意。首先,不要使用raw类型 。使用泛型: 其

  • 我在MySQL中有一个名为的表 提供以下输出, 下面提供了表,

  • 问题内容: 我正在尝试使用PHP将新列添加到我的MYSQL表中。我不确定如何更改表以创建新列。在我的评估表中,我有: 假设我有一个带有文本框的页面,然后输入文本框并按一个按钮,则表将更新为: 我的代码: 问题答案: 您的桌子: 你也可以

  • 问题内容: 这是一个非常简单的程序: 这是我期望的输出: 但是我得到了这个: 真的有我不来的东西! 问题答案: 你必须做 不 现在可以正常工作: 当您执行类似操作时,您会在一个列表中三次获得相同的列表。 相同的 意思是,当您更改其中之一时,您也会更改所有它们(因为只有一个列表被引用了3次)。 您需要创建三个独立的列表来解决此问题。您可以通过列表理解来做到这一点。您在此处构造一个由独立的空列表组成的

  • 当我添加一个部件时,它会添加到arraylist中,但是tableview不会更新。我在顶部有一个搜索字段,如果我按下按钮,它会显示新项,但我所尝试的任何东西都不会让表刷新并在添加新项时显示新项。 这是主控制器 inventory类有一个零件的静态arraylist 编辑: 如果所有工作都在主控制器内完成,所有工作都很好。例如,如果我删除上面的整个搜索代码,并将其替换为以下两行(按下后在主控制器上

  • 我正在尝试在现有列表中添加一个新项目,但无法添加。当我调试时,它显示返回为true,但最终新项没有添加到列表中。 我的示例代码如下:雇员雇员1=新雇员(5001,BOB,financeDept.getDepartment_name());雇员雇员2=新雇员(5002,SAM,financeDept.getDepartment_name());雇员雇员3=新雇员(5003,SAM,hrDept.ge