本文实例讲述了java实现对两个list快速去重并排序操作。分享给大家供大家参考,具体如下:
1:去重并排序
package twolist;
import java.util.collections;
import java.util.comparator;
import java.util.hashmap;
import java.util.hashset;
import java.util.linkedlist;
import java.util.list;
import java.util.map;
import java.util.set;
public class listmapsort {
/**
* @param args
*/
public static void main(string[] args) {
// todo 自动生成方法存根
list> listmap1 = new linkedlist>();
map map = new hashmap();
map.put("date", 20121010);
listmap1.add(map);
map = new hashmap();
map.put("date", 20011213);
listmap1.add(map);
listmap1.add(map);
map = new hashmap();
map.put("date", 20130502);
listmap1.add(map);
system.out.println("原始"+listmap1);
list> listmap2 = new linkedlist>();
set setmap = new hashset();
for(map map1 : listmap1){
if(setmap.add(map1)){
listmap2.add(map1);
}
}
system.out.println("去重"+listmap2);
collections.sort(listmap2, new comparator>(){
public int compare(map o1,map o2){
return o1.get("date").tostring().compareto(o2.get("date").tostring());
}
});
system.out.println("排序:"+listmap2);
}
}
2:去掉重复的后,相同的部分
package twolist;
import java.util.arraylist;
import java.util.hashmap;
import java.util.list;
import java.util.map;
import java.util.set;
public class removelist {
private void cleanlistbymapkey(list> list, k toberemoved) {
list> tmplist=new arraylist<>();
for(map m: list){
if(m.containskey(toberemoved))
tmplist.add(m);
}
list.removeall(tmplist);
}
public void testcleanlistbymapkey(){
list> list=new arraylist<>();
for(int i=0;i<10;i++){
map m=new hashmap<>();
m.put("key"+i, "value"+i);
list.add(m);
}
map m=new hashmap<>();
m.put("key100", "value100");
list.add(m);
system.out.println(list.contains(m));
cleanlistbymapkey(list, "key100");
system.out.println(list.contains(m));
}
public static void main(string[] args) {
/*removelist remove = new removelist();
remove.testcleanlistbymapkey();*/
// todo auto-generated method stub
map msp = new hashmap();
list> list = new arraylist>();
list> listmap = new arraylist>();
map map1 = new hashmap();
map1.put("id", "1");
map1.put("name", "p");
map map2 = new hashmap();
map2.put("id", "3");
map2.put("name", "h");
map map3 = new hashmap();
map3.put("id", "3");
map3.put("name", "f");
list.add(map1);
list.add(map3);
list.add(map2);
system.out.println("初始数据:" + list.tostring());
//把list中的数据转换成msp,去掉同一id值多余数据,保留查找到第一个id值对应的数据
for(int i = list.size()-1 ; i>=0; i--){
map map = list.get(i);
string id = (string)map.get("id");
map.remove("id");
msp.put(id, map);
}
//把msp再转换成list,就会得到根据某一字段去掉重复的数据的list
set mspkey = msp.keyset();
for(string key: mspkey){
map newmap = msp.get(key);
newmap.put("id", key);
listmap.add(newmap);
}
system.out.println("去掉重复数据后的数据:" + listmap.tostring());
}
}
曾经去某平安面试的时候面试官问的问题,当时回答是冒泡循环,哈哈,现在想想觉得好笑,跟冒泡循环个毛关系~~
切记,利用set的不重复,可以快速去除重复
用一个list的某个属性作为map的key,可以找到是否在list存在,这样你就可以做响应的处理
利用上面的demo,得到一个方案,解决下面的需求:
订单中商品的集合如下:
退款中的商品集合如下:
那么其它的商品就应该是xl:2件 m:2件
把其中一个list转成map,然后在用第二个list中的相关属性作为第一个map的key来判断,最终问题得以引刃而解,哈哈,牛逼!!
//第一步:先将原始订单中跟退款中一模一样的移除出来
map wsmap = new hashmap();
for (applyreturn applyreturn : groupitemlist) {
//格式itemid_color_size qua
wsmap.put(applyreturn.getitemid()+"_"+applyreturn.getcolor()+"_"+applyreturn.getsize(), applyreturn.getqua());
}
list newlistorderdetails = new arraylist();
list listorderdetail = order.getdetails();
//第二步:再来遍历剩下的
int mapqua = 0;
for (orderdetail orderdetail : listorderdetail) {
if(wsmap.get(orderdetail.gettid()+"_"+orderdetail.getkcolor()+"_"+orderdetail.getksize())!=null){
mapqua = integer.parseint(wsmap.get(orderdetail.gettid()+"_"+orderdetail.getkcolor()+"_"+orderdetail.getksize()).tostring());
if(mapqua
orderdetail neworderdetail = orderdetail;
neworderdetail.setqua(orderdetail.getqua()-mapqua);
newlistorderdetails.add(neworderdetail);
}
}else{
newlistorderdetails.add(orderdetail);
}
}
ps:这里再为大家提供几款相关工具供大家参考使用:
在线去除重复项工具:
在线文本去重复工具:
在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
希望本文所述对大家java程序设计有所帮助。
如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!