在实际开发和应用中,渐渐发现map的一些常用操作和小技巧,今天记录一下。
1.Map遍历
Map遍历有几种形式,可以根据key进行遍历,可以根据value进行遍历,可以直接遍历整个map,以及迭代遍历等等。
1.1根据key进行遍历
// KeySet 获取key
public void testKeySet() {
for (Integer key : map.keySet()) {
System.out.println(key);
}
}
这样你遍历出来的是你当前集合的key.
1.2根据value进行遍历
// values 获取value
public void testValues() {
for (Integer value : map.values()) {
System.out.println(value);
}
}
拿到的就是集合当中的value值。
1.3通过增强for循环遍历map
Map<String,String> cmap = new HashMap<>();
for (Map.Entry<String, Object> entry : map.entrySet()){
if(entry.getValue()!=null){
cmap.put(entry.getKey() , entry.getValue().toString());
}
}
这边是通过遍历整个map数组,然后判断该数组里面的值是否为空来进行存储,这种形式一般在调用第三方接口时对数据进行特殊处理需要做到的操作。
1.4list和map的结合
List<Map<String,String>> list = new ArrayList<>();
List<Map<String,String>> notifylist = new ArrayList<>();
File jsonFile = ResourceUtils.getFile("classpath:city.json");
String jsonSting = FileUtils.readFileToString(jsonFile);
JSONObject json = JSONObject.parseObject(jsonSting);
//1,加载供应商
JSONArray arrayCity = JSONArray.parseArray(json.getString("cityCode"));
for (int i=0;i<arrayCity.size();i++){
Map<String,String> maps = new TreeMap<>();
JSONObject jsonCity = JSONObject.parseObject(arrayCity.get(i).toString());
maps.put("apiBizCode",jsonCity.getString("apiBizCode"));
maps.put("supplierBizCode",jsonCity.getString("supplierBizCode"));
maps.put("supplierCode",jsonCity.getString("supplierCode"));
list.add(maps);
}
首先可以通过map数组来对数据进行装载,然后将整个map放入到集合中。这样的好处是用list进行取数据是很快速的,不同于map需要根据自己的键和值进行匹配。
Map<String,String> temp = notifylist.get(i);
可以通过这样一行代码来提取list中的map,在我看来是比较方便快捷的。
2.map排序
因为map本身就是通过key--value的形式来存储和取出数据的,但是为了让数据存入到数据库不是杂乱无章的,且不需要通过sql语句进行校正,所以我们要用到中间的一个map类型----TreeMap来进行排序。
public static void main(String[] args) {
//1、TreeMap如不指定排序器,默认将按照key值进行升序排序,如果指定了排序器,则按照指定的排序器进行排序。
//2、具体的排序规则,可以在int compare()方法中进行指定。
//不指定排序器
TreeMap<String, String> treeMap1 = new TreeMap<String, String>();
treeMap1.put("4", "1");
treeMap1.put("2", "1");
treeMap1.put("1", "1");
treeMap1.put("3", "1");
System.out.println("treeMap1="+treeMap1);
//指定排序器
TreeMap<String, String> treeMap2 = new TreeMap<String, String>(new Comparator<String>(){
/*
* int compare(Object o1, Object o2) 返回一个基本类型的整型,
* 返回负数表示:o1 小于o2,
* 返回0 表示:o1和o2相等,
* 返回正数表示:o1大于o2。
*/
public int compare(String o1, String o2) {
//指定排序器按照降序排列
return o2.compareTo(o1);
}
});
treeMap2.put("2", "1");
treeMap2.put("3", "1");
treeMap2.put("1", "1");
treeMap2.put("4", "1");
System.out.println("treeMap2="+treeMap2);
}
在不指定排序规则的情况下是按照升序排列,没有别的要求的情况下一般按照这样做即可,不过我下面还提供了一种自定义排序规则的map方式可供大家参考。
3.map灵活运用
在一些开发过程中,你可以将一些公共的东西抽象出来到一个map集合的方法中,只用相应的map去进行接收即可。
public Map<String, Object> initParamMap() {
Map<String, Object> params = new HashMap<>();
params.put("client_id", clientId);
params.put("timestamp", String.valueOf(System.currentTimeMillis()));
return params;
}
Map<String, Object> params = initParamMap();
这样可以减少代码的冗余程度。