java获取list相同的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java获取list相同的数据相关的知识,希望对你有一定的参考价值。

我在java用三个list获取到了数据库三张表的数据,只有一个goodsId是共有的,第一个list获取到了总的数据,怎么根据goodsId判断我另外两个list都有这个goodsId,然后打印出来(另外两个list获取数据的表,里面的数据都是根据第一个list获取数据的表中goodsId插入的,所以只会有相同的)

参考技术A 可以用LIST集合的方法contains判断一个元素是否在集合的数据中存在。追问

用了,两个就得,三个就不行了,循环的时候,我在打印语句下面加了break也才跳回第二个循环,第一个怎么也跳不会回去,第一个数字都不会变化,然后就直接走下面了

追答

给你一个思路吧:
先把第一个LIST与第二个LIST进行比较,相同的GOODSID放入到TEMPLIST中
然后用TEMPLIST于第三个LIST进行比较,相同的GOODSID打印出来就可以了。
不能用三层循环,毫无意义的增加的额外的处理。

追问

我在想,用哪个list里面的goodsId放到template里面

追答

你不是说第一个里的在第二个和第三个里都有吗

追问

是啊,那接的时候呢

本回答被提问者采纳
参考技术B 首先转成数组,list.asarray()
然後排序(需要重写实体的compareto方法),再相邻数据两两比较
这个目的有点奇怪,你的实现思路感觉不是很对。如果是要得到重复数据,为什麼不用map存呢?
补充:
不相同就删除对象?还是相同就删除对象?
参考技术C

    重写bean(存入数据库的实体类 )  equals(Object o) 方法当goodsId
     相等时则人认为 次为两个相同的商品

    然后通过list.contains() 半段是否包好此商品

    要是另外两个list中的实体不一样  则可以写一个父类  重写equals(Object o) 方法

追问

直接用contains()不行吗?这个也能判断啊

参考技术D 我觉得你这个做法有点太麻烦了,其实用一句SQL不就能处理了么?
不过由于你描述的不是很明确,我姑且认为你想要找到在三个表里面都有的goodsId的数据的信息吗?
假设你的总数据表 A 另外是B C,你只需要执行类似以下的SQL
select A.* FROM A WHERE EXISTS(SELECT B.ID FROM B WHERE B.GOODSID =A.GOODSID )
AND EXISTS(SELECT C.ID FROM C WHERE C.GOODSID =A.GOODSID )这样直接就是你要的数据了,为什么还有全部拿出来,然后再去过滤呢?

java取List中重复的数据!

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

实现取出数据后,单位相同的相加,不相同的拼在一期,最后输出的是 1000美元3000日元1500欧元,这个循环怎么写呢

package acc.testJSON;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class AA 



public static void main(String[] args) 
List<Map<Integer,String>> list=new ArrayList<Map<Integer,String>>();

Map<Integer,String> map2=new HashMap<Integer,String>();
map2.put(1, "美元");
map2.put(2, "日元");

map2.put(3, "欧元");
map2.put(4, "日元");
map2.put(5, "人民币");
map2.put(10, "欧元");

list.add(map2);



System.out.println("--------之前---------------");
for(int i=0;i<list.size();i++)
Map<Integer,String> tempMap=list.get(i);
 for(Entry<Integer,String> e:tempMap.entrySet())
 System.out.println("K: "+e.getKey()+" v: "+e.getValue());
 

 System.out.println("---------------------开始处理--------------------------");
 List<Map<String,Integer>> newList=new ArrayList<Map<String,Integer>>();
      AA aa=new AA();
      newList=aa.executMoedth(list);//如果有相同的
    

System.out.println("--------之后---------------");

for(int i=0;i<newList.size();i++)
Map<String,Integer> tempMap=newList.get(i);
 for(Entry<String,Integer> e:tempMap.entrySet())
 System.out.println(e.getValue()+":"+e.getKey());
 





public List<Map<String,Integer>> executMoedth(List<Map<Integer,String>> list)

 System.out.println("---------------------处理中--------------------------");
 List<Map<String,Integer>> newList=new ArrayList<Map<String,Integer>>();
Map<String,Integer> newMap=new HashMap<String,Integer>();  
 
for(int i=0;i<list.size();i++)

Map<Integer,String> tempMap=list.get(i);//第i个list中的Map

 for(Entry<Integer,String> e1:tempMap.entrySet())//map遍历 
 int tempi=0;
 for(Entry<Integer,String> e2:tempMap.entrySet())//map遍历 

 if(e1.getValue().equals(e2.getValue()))//如果相等
 
 
 if(!e1.equals(e2))
/* tempi++;
 if(tempi>=1)*/
 
// newMap.remove(e1.getKey());//移除第一个添加的
 int newValus=e1.getKey()+e2.getKey();//得到总钱数
 String newKey=e1.getValue();

     newMap.remove(e1.getValue());//干掉
 newMap.remove(e2.getValue());//干掉
             System.out.println("找到一个 已处理:"+newKey + newValus);
             
             newMap.put(newKey,newValus);//新集合
 
 
 //如果新集合里没有的
 if(!newMap.containsKey(e1.getValue()))
   newMap.put(e1.getValue(),e1.getKey());//新集合

 
 
 
 


 
newList.add(newMap);//新集合 
 

 return newList;



参考技术A import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@SuppressWarnings("unchecked")
public class TestList //koukouGroup two one seven seven seven one two有不明白的进来问
public static List<Map> turn2Union(List<Map> inList)
List<Map> outList = new ArrayList<Map>();//用于返回list
Map<String,Integer> danMaps = new HashMap<String,Integer>();//用于记录单位和金额如果金额不是整数就把Integer改成double啥的
List<String> danKeys = new ArrayList<String>();//用于记录单位


for (int i = 0; i < inList.size(); i++) 
Map inMap = inList.get(i);
String oneDan = inMap.get("danwei").toString();//取出单位
if(danMaps.containsKey(oneDan))
danMaps.put(oneDan, danMaps.get(oneDan)+Integer.valueOf(inMap.get("jine").toString()));
else
danMaps.put(oneDan, Integer.valueOf(inMap.get("jine").toString()));
danKeys.add(oneDan);



for (int i = 0; i < danKeys.size(); i++) 
Map map = new HashMap();
map.put("danwei",danKeys.get(i));
map.put("jine",danMaps.get(danKeys.get(i)));
outList.add(map);

return outList;


public static void main(String[] args) 
List<Map> list = new ArrayList<Map>();

Map map1 = new HashMap();
map1.put("danwei", "美元");
map1.put("jine", "1000");
list.add(map1);

Map map2 = new HashMap();
map2.put("danwei", "日元");
map2.put("jine", "2000");
list.add(map2);

Map map3 = new HashMap();
map3.put("danwei", "日元");
map3.put("jine", "1000");
list.add(map3);

Map map4 = new HashMap();
map4.put("danwei", "欧元");
map4.put("jine", "1500");
list.add(map4);

List<Map> tList = turn2Union(list);

for (int i = 0; i < tList.size(); i++) 
Map map = tList.get(i);
System.out.println(map.get("danwei")+":"+map.get("jine"));


本回答被提问者采纳
参考技术B netbeans eclipse 参考技术C 不好说啊,你的map里面的key是什么?

以上是关于java获取list相同的数据的主要内容,如果未能解决你的问题,请参考以下文章

java List合并相同的项的问题?

java怎样把两个list里边相同的数据取出

java 中 。数据库中有10万条记录 list中有5万条 ,怎样不通过for循环,找出数据库和list中相同的数据?

Java 将list日期相同的数据放到 同一list下

java for循环 怎样把一个list里相同的数据放到一起

合并两个数组,并且把相同的数值覆盖掉