Java遍历map和StringBuilder的用法

      List<Map<String, Object>> validInfo = perCaseDao.selectValidInfo(perCase);
      if(validInfo != null && validInfo.size()!=0){
        StringBuilder s = new StringBuilder("提交时验证失败!");
        StringBuilder s1=new StringBuilder();
        StringBuilder s2=new StringBuilder();
        StringBuilder s3=new StringBuilder();
        for (Iterator<Map<String, Object>> it = validInfo.iterator(); it.hasNext();) {
          Map<String, Object> info = it.next();
          String type = info.get("type").toString();
          Object msg= info.get("msg");
          if("1".equals(type)){
            s1.append(",").append(msg);
          } else if("2".equals(type)) {
            s2.append(",").append(msg);
          } else if("3".equals(type)) {
            s3.append(",").append(msg).append(" 权利单独共有时不能有多个权利人");
          } else if("4".equals(type)) {
            s3.append(",").append(msg).append(" 按份共有时占有比例之和不等于100%");
          }
        }
        if(s1.length()!=0){
          s.append(s1.substring(1)).append(" 未添加;");
        }
        if(s2.length()!=0){
          s.append(s2.substring(1)).append(" 材料未添加;");
        }
        if(s3.length()!=0){
          s.append(s3.substring(1)).append(";");
        }
        s.append("请检查确认无误后再提交。");
        throw new BusinessRuntimeException(s.toString());
      }
    
    //获取分类数据并转换为in条件
    List<Map<String, Object>> rtd = registTypeDao.selectIntegratedClassDetail();
    for (Iterator<Map<String, Object>> it = rtd.iterator(); it.hasNext();) {
      Map<String, Object> map = it.next();
      map.put("registType",
          "'" + ((String) map.get("registType")).replaceAll(",", "','") + "'");
      map.put("registTypeDesc",
          "'" + ((String) map.get("registTypeDesc")).replaceAll(",", "','")
              + "'");
    }

    //查询当前和累计数据
    List<Map<String, Object>> rs1 = integratedDao
        .selectCdata(sDate, eDate, rtd,dept);
    List<Map<String, Object>> rs2 = integratedDao.selectTdata(eDate, rtd,dept);
    
    //合并数据 计算其他项数据
    int cl = rtd.size();
    Object o;
    int cAcceptOther;
    int cRatifyOther;
    int tAcceptOther;
    int tRatifyOther;
    for (int i = 0; i < rs1.size(); i++) {
      Map<String, Object> map = rs1.get(i);
      map.putAll(rs2.get(i));

      o = map.get("cAccept");
      cAcceptOther = o == null ? 0 : ((BigDecimal) o).intValue();
      o = map.get("cRatify");
      cRatifyOther = o == null ? 0 : ((BigDecimal) o).intValue();
      o = map.get("tAccept");
      tAcceptOther = o == null ? 0 : ((BigDecimal) o).intValue();
      o = map.get("tRatify");
      tRatifyOther = o == null ? 0 : ((BigDecimal) o).intValue();

      for (int j = 0; j < cl; j++) {
        o = map.get("cAccept" + j);
        cAcceptOther -= o == null ? 0 : ((BigDecimal) o).intValue();
        o = map.get("cRatify" + j);
        cRatifyOther -= o == null ? 0 : ((BigDecimal) o).intValue();
        o = map.get("tAccept" + j);
        tAcceptOther -= o == null ? 0 : ((BigDecimal) o).intValue();
        o = map.get("tRatify" + j);
        tRatifyOther -= o == null ? 0 : ((BigDecimal) o).intValue();
      }

      map.put("cAcceptOther", cAcceptOther);
      map.put("cRatifyOther", cRatifyOther);
      map.put("tAcceptOther", tAcceptOther);
      map.put("tRatifyOther", tRatifyOther);
    }
    return rs1;
  

方法一:在for-each循环中使用entry来遍历

Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
for(Map.Entry<Integer,Integer> entry:map.entrySet()){ 
System.out.println("key="+entry.getKey()+",value = "+entry.getValue()); 


方法二:在for-each循环中遍历keys或values

Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
//遍历map中的键 
for(Integer key:map.keySet()){ 
System.out.println("key="+key);
} 
//遍历map中的值 
for(Integer value:map.values()){ 
System.out.println("value ="+value);
}

方法三:使用Iterator遍历

Map<Integer,Integer> map = new HashMap<Integer,Integer>(); 
Iterator<Map.Entry<Integer,Integer>> entries = map.entrySet().iterator(); 
while(entries.hasNext()){
Map.Entry<Integer,Integer> entry = entries.next(); 
System.out.println("key="+entry.getKey()+"value = "+entry.getValue()); 
}

方法四:不使用泛型

Map map = new HashMap(); 
Iterator entries = map.entrySet().iterator(); 
while(entries.hasNext()){ 
Map.Entry entry = (Map.Entry)entries.next(); 
Integer key = (Integer)entry.getKey(); 
Integer value = (Integer)entry.getValue(); 
System.out.println("key = "+key+",value = "+value);
}
 

总结
如果只是获取key,或者value,推荐使用keySet或者values方式

如果同时需要key和value推荐使用entrySet

如果需要在遍历过程中删除元素推荐使用Iterator

如果需要在遍历过程中增加元素,可以新建一个临时map存放新增的元素,等遍历完毕,再把临时map放到原来的map中
 

Map<String, List<String>> map = new HashMap<String, List<String>>();
map.put("qlrName", new ArrayList<String>());
//遍历map
for (Iterator<Entry<String, List<String>>> it = map.entrySet().iterator(); it
        .hasNext();) {
      Entry<String, List<String>> e = it.next();
      mv.addObject(e.getKey(), StringUtils.join(e.getValue(), ','));
    }

//Iterator遍历list和map

import java.util.*;


public class TestIterator {


public static void main(String[] args) {


List list=new ArrayList();


Map map=new HashMap();
//初始化list和map的数据
for(int i=0;i<10;i++){


list.add(new String("list"+i) );


map.put(i, new String("map"+i));


}


Iterator iterList= list.iterator();//List接口实现了Iterable接口
//循环list
while(iterList.hasNext()){


String strList=(String)iterList.next();


System.out.println(strList.toString());


}


Iterator iterMap=map.entrySet().iterator();
//循环map
while(iterMap.hasNext()){


Map.Entry strMap=(Map.Entry)iterMap.next();


System.out.println(strMap.getValue());


}


}


}

 
原文地址:https://www.cnblogs.com/gaomanito/p/8674792.html