【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中还有元素,则视为新增加的元素。但在使用迭代器遍历时,对该元素进行修改是不合适的,会引发错误,因此进行了修改。这样更清晰、更好。