【Java】比较Map

比较地图的方式

我想做的事情是,要比较列表A和列表B,然后提取出两者共有和只在列表A中存在的项目。我希望能够在更新和新增时进行不同的处理。

※2016/12/16:根据asahina_dev先生的指摘对其进行了修正。

/* package whatever; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main (String[] args) throws java.lang.Exception
    {
        // MAP-A
        Map<String, String> listA = new HashMap<String, String>();
        listA.put("fruits","apple");
        listA.put("animal","cat");
        listA.put("sports","soccer");
        listA.put("drink","water");
        // MAP-B
        Map<String, String> listB = new HashMap<String, String>();
        listB.put("sports","soccer");
        listB.put("fruits","apple");
        listB.put("color","red");

        //Set<Map.Entry<K,V>>でまわしてリストBにもあれば更新、なければ新規
        for(Map.Entry<String,String> entry : listA.entrySet()){
            String key = entry.getKey();
            String val = entry.getValue();
            if(listB.get(key) != null){
                entry.setValue(val + "Koshin");
            } else {
                entry.setValue(val + "Shinki");
            }
        }   
        System.out.println(listA);
    }
}

实际上更为复杂,但简化后变成了这个感觉。
最开始准备了列表C,将共同的元素放入列表C,然后从列表A和B中删除这些元素,最后如果列表A中还有元素,则视为新增加的元素。但在使用迭代器遍历时,对该元素进行修改是不合适的,会引发错误,因此进行了修改。这样更清晰、更好。

广告
将在 10 秒后关闭
bannerAds