一个list中的数据,list中放的是map
比如:
金额  单位
1000 美元
2000 日元
1300 日元
1500 欧元实现取出数据后,单位相同的相加,不相同的拼在一期,最后输出的是 1000美元3000日元1500欧元,这个循环怎么写呢?
list.get(i).get("je");

解决方案 »

  1.   

    首先,现有的Map map1<Integer,String>是<金额,单位>;
    再定义一个Map map2<String,Integer>是<单位,金额>;循环map1,取得其金额和单位,然后用“单位”为键,在map2中get,如果得到值,则将map1当前的key值加map2对应的value值,然后map2.put回去;如果map2中没有取到值,则直接map2.put("单位",map1的键值);最后,map2中就是你要的结果,可以再把它颠倒过来,放到Map map3<Integer,String>,<金额,单位>
      

  2.   

    存的话可以用Map<货币种类,金额总数>
    取的话
    for(Map map:list){
    for(Object key:map){
    System.out.println(map.get(key));
    }
    }
      

  3.   

    你这个原来的LIST是不是就有问题呀。。
    金额 单位怎么用MAP存。  
    金额 单位应该都是可以重复的呀。
      

  4.   

    你重新定义个map<货币类型,数值> map1,然后循环list,因为list里面是个map,那么map你就直接去的货币类型和金额,如果map1中存在货币,则取出map1中的数值,并将这个数值跟list->map中的这个值相加,然后将加出来的结果重新赋值给map1的这个货币,如果map1中不存在货币,则将list->map中的货币类型和金额直接赋值给map1就可以了,循环完list,map1就是你要的
    代码如下:
    Map<String,Integer> map1 = new HashMap<String,Intege>();
    for(Map<String,Integer> map : list){
    //如果你的map本身也是很多内容,则也需要循环
    Iterator<String> iter = map,KeySet().iterator();
    while(iter.hasNext()){
    String key = iter.next();
    Integar value = map.get(key);
    Integer i_map_v = 0;
    if(map1.containsKey(key)){
    i_map_v = map1.get(key);
    }
    map1.put(key,value + i_map_v);
    }
    }
      

  5.   

    Map<String, Integer> map1 = new HashMap<String, Integer>();
    map1.put("美元", 1000);
    Map<String, Integer> map2 = new HashMap<String, Integer>();
    map2.put("欧元", 2000);
    Map<String, Integer> map3 = new HashMap<String, Integer>();
    map3.put("欧元", 1000);
    Map<String, Integer> map4 = new HashMap<String, Integer>();
    map4.put("日元", 2000);
    List<Map> list = new ArrayList<Map>();
    list.add(map1);
    list.add(map2);
    list.add(map3);
    list.add(map4);

    Map<String,Integer > moneyMap = new HashMap<String,Integer >();

    for (int i = 0; i < list.size(); i ++) {
    Map map = (Map)list.get(i);
    Iterator iterator =  map.entrySet().iterator();
    while (iterator.hasNext()) {
    Map.Entry entry = (Map.Entry)iterator.next();
    if (!moneyMap.containsKey(entry.getKey().toString())) {
    moneyMap.put(entry.getKey().toString(), (Integer)entry.getValue());
    } else {
    int money = moneyMap.get(entry.getKey().toString());
    moneyMap.remove(entry.getKey().toString());
    moneyMap.put(entry.getKey().toString(), (Integer)entry.getValue() + money);
    }
    }
    }
    System.out.println(moneyMap);


    楼主试试吧。
      

  6.   


    import java.util.*;
    public class  MapDemo
    {
    public static void main(String[] args) 
    {
    Map<String, Float> map1 = new HashMap<String, Float>(); 
    map1.put("美元", 1000f); 
    map1.put("欧元", 2000f); 
    map1.put("欧元", 1000f); 
    map1.put("日元", 2000f); 
    float usmoney=0.0f;
    float jpmoney=0.0f;
    float upmoney=0.0f;
    for(Map.Entry<String, Float> me :map1.entrySet())
    {
     
      String money=me.getKey();
      if (money.equals("美元")) usmoney=usmoney+me.getValue();
      if (money.equals("日元")) jpmoney=jpmoney+me.getValue();
      if (money.equals("欧元")) upmoney=upmoney+me.getValue();
    //System.out.println(me.getKey()+"-------->"+me.getValue());
    }
    System.out.println("美元-------->"+usmoney);
    System.out.println("日元-------->"+jpmoney);
    System.out.println("欧元-------->"+upmoney);
    }
    }
      

  7.   

    +1
    不好意思,这个需要做下处理,因为相同的key会使map原有的值被覆盖 public static void main(String[] args) { Map<String, Float> map1 = new HashMap<String, Float>();
    Map<String, Float> map2 = new HashMap<String, Float>();
    Map<String, Float> map3 = new HashMap<String, Float>();
    Map<String, Float> map4 = new HashMap<String, Float>();
    map1.put("美元", 1000f);
    map2.put("欧元", 2000f);
    map3.put("欧元", 1000f);
    map4.put("日元", 2000f);
    float usmoney = 0.0f;
    float jpmoney = 0.0f;
    float upmoney = 0.0f;
    List<Map> list = new ArrayList<Map>();
    list.add(map1);
    list.add(map2);
    list.add(map3);
    list.add(map4);
    Map<String, Float> mapAll = new HashMap<String, Float>();
    for (Map<String, Float> map : list) {
    for (Map.Entry<String, Float> me : map.entrySet()) {
    String key = me.getKey();
    if (mapAll.get(key) == null) {
    mapAll.put(key, me.getValue());
    } else {
    mapAll.put(key, mapAll.get(key) + me.getValue());
    }
    }
    }
    System.out.println(mapAll);//{日元=2000.0, 欧元=3000.0, 美元=1000.0}
    }