java 中一个list循环list一段数据中某几位如果相同则去掉,这个怎么处理
比如 一段list (空格分开)
0 kobe 24 2012-09-05 8888
1 James 23 2012-08-08 6666
2 wade 3 2011-02-02 3333
3 kobe 24 2012-09-05 4444
4 James 23 2012-06-06 6666
这段我要去掉第 二 位 第三位 和第四位相同的
得到
0 kobe 24 2012-09-05 8888
1 James 23 2012-08-08 6666
2 wade 3 2011-02-02 3333
//这段kobe的与上面的逻辑符合,则去掉了?
4 James 23 2012-06-06 6666
请问各位大大,这个怎么实现???
答案:你可以把已遍历的对象唯一识别码放入map,每次遍历下一个的时候,获取当前遍历的对象识别码,用作map的key,看看是否已经存在map中,如果存在就移除集合当前的对象,如果不存在,就仍旧放入map中,大致代码片段如下:
Map<String, Integer> uniqueMap = new HashMap<String, Integer>();
while(i< list.size()){
Man m = list.get(i)
if(uniqueMap .get(m.getName()) != null){
list.remove(i); //这里因为移除了一个,所以遍历序号不需要增加
}else{
uniqueMap .put(m.getName(), 0);
i ++; //这里因为没有移除,所以序号正常增加
}
}
其他:List<SomeClass> newlist = new ArrayList<SomeClass>();
for(SomeClass aObj:list){
if(!newlist.contains(aObj)){
newlist.add(aObj);
}
}
现在 newlist里面就是你需要的东西了 迭代,放map根据这几位数据来拼成长字符串MD5来做key相同则不要加入,当然这只是一种思路。 说说思路,用2层for循环逐个用正则表达式对比,相似的放在另一个list,然后在两个list对比删除元list for(int i =0; i<list1.size();i++){
String[] temp1 = list1.get(i).toString().split(" ");
for(int j = 0;j<list1.size();j++){
String[] temp2 = list1.get(j).toString().split(" ");
if(temp1[1].equals(temp2[1]) && temp1[2].equals(temp2[2]) && temp1[3].equals(temp2[3])){
list1.remove(j);
}
}
}
上一个:jsp servlet jdbc 我想实现当程序启动时,就把数据库的数据展示在页面上,mvc示例代码最好谢谢
下一个:想用java生成如下图界面,前提:这个界面是属于二级界面的,所以已经继承了JInternalFrame