当前位置:编程学习 > JAVA >>

java去List中重复的值得问题

一个list中的数据,list中放的是map
比如:
金额  单位
1000 美元
2000 日元
1300 日元
1500 欧元

实现取出数据后,单位相同的相加,不相同的拼在一期,最后输出的是 1000美元3000日元1500欧元,这个循环怎么写呢?
list.get(i).get("je"); --------------------编程问答-------------------- 首先,现有的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>,<金额,单位> --------------------编程问答-------------------- 存的话可以用Map<货币种类,金额总数>
取的话
for(Map map:list){
for(Object key:map){
System.out.println(map.get(key));
}
} --------------------编程问答-------------------- 果断关注学习中 --------------------编程问答-------------------- 你这个原来的LIST是不是就有问题呀。。
金额 单位怎么用MAP存。  
金额 单位应该都是可以重复的呀。 --------------------编程问答-------------------- 你重新定义个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);
}
} --------------------编程问答--------------------


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);




楼主试试吧。 --------------------编程问答--------------------



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 楼 manandrew 的回复:



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);
}
}



+1 --------------------编程问答--------------------
引用 8 楼 draem0507 的回复:
Quote: 引用 7 楼 manandrew 的回复:




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);
}
}



+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}
}

补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,