一个list中的数据,list中放的是map
比如:
金额 单位
1000 美元
2000 日元
1300 日元
1500 欧元实现取出数据后,单位相同的相加,不相同的拼在一期,最后输出的是 1000美元3000日元1500欧元,这个循环怎么写呢?
list.get(i).get("je");
比如:
金额 单位
1000 美元
2000 日元
1300 日元
1500 欧元实现取出数据后,单位相同的相加,不相同的拼在一期,最后输出的是 1000美元3000日元1500欧元,这个循环怎么写呢?
list.get(i).get("je");
再定义一个Map map2<String,Integer>是<单位,金额>;循环map1,取得其金额和单位,然后用“单位”为键,在map2中get,如果得到值,则将map1当前的key值加map2对应的value值,然后map2.put回去;如果map2中没有取到值,则直接map2.put("单位",map1的键值);最后,map2中就是你要的结果,可以再把它颠倒过来,放到Map map3<Integer,String>,<金额,单位>
取的话
for(Map map:list){
for(Object key:map){
System.out.println(map.get(key));
}
}
金额 单位怎么用MAP存。
金额 单位应该都是可以重复的呀。
代码如下:
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);
}
}
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);
楼主试试吧。
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);
}
}
不好意思,这个需要做下处理,因为相同的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}
}