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

将两个映射迭代为两个映射的第三个映射

颛孙庆
2023-03-14

我有两个地图,键为整数,值为双倍。

我想创建第三个按键排序的映射,值将是两个映射的双精度列表。

地图1:

1, 90.00
5, 75.45
8, 76.50

Map2:

4, 12.00
5, 322.09
8, 11.09
9, 21.00

最终地图:

1, (90.00,0.00)
5, (75.45,322.09)
8, (76.50,11.09)
9, (0.00, 21.00)

如上所述,如果一个地图中的一个键在另一个地图中丢失,则另一个地图的最终地图中的值应默认为0.00

Map firstMap = new HashMap<Integer, Double>();
Map secondMap = new HashMap<Integer, Double>();

Map finalMap = new HashMap<Integer, List<Double>>();

firstMap.put(1, 90.00);
firstMap.put(5, 75.45);
firstMap.put(8, 76.50);

secondMap.put(4, 12.00);
secondMap.put(5, 322.09);
secondMap.put(8, 11.09);
secondMap.put(9, 21.00);

我可以使用putAll方法将所有键放入第三张地图。但如何按照我的意愿设定这些值呢?

感谢阅读!

共有2个答案

曹钊
2023-03-14

以下代码将执行请求的操作

List<Map<Integer, Double>> originals = getOriginalLists();

Map<Integer, List<Double>> result = new HashMap<Integer, List<Double>>();
for (Map<Integer, Double> original : originals) {
    for (Map.Entry<Integer, Double> entry : original.entrySet()) {
        if (!result.containsKey(entry.getKey())) {
            result.put(entry.getKey(), new ArrayList<Double>());
        }
        result.get(entry.getKey()).add(entry.getValue());
    }
}

它使用一个映射列表,因此解决方案不限于两个映射。

邢冷勋
2023-03-14

简单地做

// Create a sorted map
Map<Integer, List<Double>> finalMap = new TreeMap<Integer, List<Double>>();

Set<Integer> keys = new HashSet<Integer>();
keys.addAll(firstMap.keySet());
keys.addAll(secondMap.keySet());
for (Integer key : keys) {
    double first  = firstMap.containsKey(key)  ? firstMap.get(key)  : 0.0;
    double second = secondMap.containsKey(key) ? secondMap.get(key) : 0.0;
    finalMap.put(key, Arrays.asList(first, second));
}

使用番石榴,简单到

Multimap<Integer, Double> finalMultiMap = ArrayListMultimap.create();
finalMultiMap.putAll(Multimaps.forMap(firstMap));
finalMultiMap.putAll(Multimaps.forMap(secondMap));

Map<Integer, Collection<Double>> finalMap = finalMultiMap.asMap();
 类似资料:
  • 我有两份清单: 列表1: Object1(name1, id1) 列表2: Object2(name2, id2) 给定list1的大小与list2相同 我想迭代list2,如果list2的name2不为null,则更新list1的name1。 以下是使用旧java的代码: 用java实现这一点的最佳方法是什么。util。流动

  • 我是初学者,我想通过使用两个旧映射hm1和hm2创建一个新映射hm3,在该映射中,我需要第二个映射的值作为键,第一个映射的值作为值,例如:如果映射hm1包含a1作为key1和abc作为value1,它还包含a2作为key2和xyz作为value2,并且还有另一个映射hm2,它包含a1作为key1和b1作为value1,还包含a2作为key2和b2作为value2,那么在映射hm3中,我需要b1作为

  • 我有一些代码需要帮助...我正在尝试使用两个地图作为源并同时使用java lambdas构建地图 我可以用你们在上面看到的foreach做到这一点,但我试图用lambdas做到这一点。。。像这样的 我想要的输出是这样的 但我无法理解

  • 问题内容: 我需要将两个表映射到一个类,但很难弄清楚。一个表是ROOMS,另一个表是TRAINERS。 ROOMS表: 培训人员表: 表应当加入了,和。 ROOMS表的主键是:。TRAINERS表的主键是:。 我需要通过查询这个数据,,,,和。 在SQL中,可能类似于: 我正在项目中其他地方使用ROOMS表,它已经映射为独立对象。是否有一种方法可以将其用作TRAINERS对象的子对象,或者将这两个

  • 我想将我的应用程序迁移到Spring Boot Jar部署。它目前使用没有启动的Spring4。 我在上有一个REST-API侦听器,在上有一个JavaScript-fronten,可以在上访问。 现在我找不到在靴子里做同样的事情的方法。 通过更改属性,我设法在处获得了api监听,但是我没有在处注册第二个servlet来为我的js-frontend服务。我知道jar部署不支持,我还知道Spring

  • 我需要将Java转换为的实例(包括映射内容) 我应该用什么来代替来使此代码可编译?