比较两个哈希映射和打印交叉点

时间:2015-11-05 10:19:19

标签: java hashmap comparison

我有两个哈希映射:一个包含一个Integer键和一个String值。

另一个包含Integer键和float值。

代码

Map<Integer,String> mapA = new HashMap<>();
mapA.put(1, "AS");
mapA.put(2, "Wf");

Map<Integer,Float> mapB = new HashMap<>();
mapB.put(2, 5.0f);
mapB.put(3, 9.0f);

我的问题是如何使用整数键值比较两个哈希映射?我想在键值相同时打印位图值。

5 个答案:

答案 0 :(得分:1)

您只需迭代mapA的密钥,然后检查它是否存在于mapB中,然后将该值添加到第三个mapC

Map<String, float> mapC = new HashMap<String, float>();

for (Integer key : mapA.keySet()) {
    if (mapB.containsKey(key)) {
        mapC.put(mapA.get(key), mapB.get(key));
    }
}

答案 1 :(得分:0)

使用mapB迭代器比较两个地图中的键。

Iterator<Entry<Integer, Float>> iterator = mapB.entrySet().iterator();
    while(iterator.hasNext()) {
        Entry<Integer, Float> entry = iterator.next();
        Integer integer = entry.getKey();
        if(mapA.containsKey(integer)) {
            System.out.println("Float Value : " + entry.getValue());
        }
    }

答案 2 :(得分:0)

如果您允许修改mapB,则解决方案就像mapB.keySet().retainAll(mapA.keySet());一样简单。

这只会在mapB中保留mapA中具有相应密钥的条目,因为keySet()返回的集合由地图本身支持,对其所做的任何更改都将被反映到地图上。

答案 3 :(得分:0)

是的,我得到了解决方案......

 if(mapB.containsKey(position)){
          Log.e("bucky",mapB.get(position));}

position表示整数值。

答案 4 :(得分:0)

使用Java 8 Streams API:

function log(...args) {
  const [descriptor] = args;
  const { kind, elements } = descriptor;

  const newElements = elements.concat({
    kind: "method",
    placement: "prototype",
    key: "constructor",
    descriptor: {
      value: (...args) => {
        // I have tried this but it doesn't work...
        console.log("log", args);
      },
      configurable: true,
      writable: true,
      enumerable: true,
    },
  });

  return {
    kind,
    elements: newElements,
  };
}