List 中重复的数据 随机删除掉 只保留一条 。

cht6334961 2019-01-23 11:52:03
List中根据ID ,查出重复的数据 ,然后把这几条重复的数据 随机保留一条 。
...全文
602 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
十八道胡同 2019-01-23
  • 打赏
  • 举报
回复
package com.demo;


import java.util.*;

public class Test10 {
    public static void main(String[] args) {
        new Test10().Test();
    }

    public void Test() {
        List<TestDemo> myList = new ArrayList<TestDemo>();
        myList.add(new TestDemo("1", "1"));
        myList.add(new TestDemo("1", "11"));
        myList.add(new TestDemo("1", "111"));
        myList.add(new TestDemo("2", "2"));
        myList.add(new TestDemo("2", "22"));


        Collections.sort(myList, new Comparator<TestDemo>() {
            @Override
            public int compare(TestDemo o1, TestDemo o2) {
                return Integer.valueOf( o1.getID())-Integer.valueOf( o2.getID());
            }
        });
        myList.forEach(i->{
            System.out.println(i.toString());
        });
        System.out.println("------");
        Iterator<TestDemo> it = myList.iterator();
        TestDemo lastDemo=null ;
        while(it.hasNext()){
            TestDemo x = it.next();
            if(lastDemo==null)
            {
                lastDemo=x;continue;
            }else
            {
                if(x.getID().equals(lastDemo.getID())){
                    it.remove();
                }else{
                    lastDemo=x;
                }
            }
        }
        System.out.println("---结果---");
        myList.forEach(i->{
            System.out.println(i.toString());
        });
    }

    public class TestDemo {
        private String ID;
        private String Values;

        @Override
        public String toString() {
            return "TestDemo{" +
                    "ID='" + ID + '\'' +
                    ", Values='" + Values + '\'' +
                    '}';
        }

        public TestDemo(String ID, String values) {
            this.ID = ID;
            Values = values;
        }

        public String getID() {
            return ID;
        }

        public void setID(String ID) {
            this.ID = ID;
        }

        public String getValues() {
            return Values;
        }

        public void setValues(String values) {
            Values = values;
        }
    }
}
十八道胡同 2019-01-23
  • 打赏
  • 举报
回复
思路1: 全LIST按照 ID排序,然后判断前面的ID和后面的ID一样不,如果一样就把后面的数据去掉
podd 2019-01-23
  • 打赏
  • 举报
回复
public static List<String> removeDuplist(List<String> list) { if (isNotNull(list)) { HashSet<String> hashSet = new HashSet<String>(list); list.clear(); list.addAll(hashSet); } return list; }
粉突 2019-01-23
  • 打赏
  • 举报
回复
六楼已经是正解了
nayi_224 2019-01-23
  • 打赏
  • 举报
回复
package test.gt60;

import java.util.*;

public class Test69 {
    public static void main(String[] args) {
    	for(int i = 0; i <= 100; i++)
    		new Test69().Test();
    }

    public void Test() {
    	Set<String> set = new HashSet<String>();
        List<TestDemo> list = new ArrayList<TestDemo>();
        List<TestDemo> result = new ArrayList<TestDemo>();
        list.add(new TestDemo("1", "1"));
        list.add(new TestDemo("1", "11"));
        list.add(new TestDemo("1", "111"));
        list.add(new TestDemo("2", "2"));
        list.add(new TestDemo("2", "22"));

        int[] intArr = new int[list.size()];
        
        for(int i = 0; i < intArr.length; i++)
        	intArr[i] = i;
        
        Random rd = new Random();
        for(int i = 0; i < intArr.length; i++){
        	int temp = rd.nextInt(intArr.length - i);
        	if(set.add(list.get(intArr[temp]).getID()))
        		result.add(list.get(intArr[temp]));
        	
        	swap(intArr, temp, intArr.length - 1 - i);
        }
        
        System.out.println(result);
    }
    
    private static void swap(int[] arr, int i1, int i2){
    	int temp = arr[i2];
    	arr[i2] = arr[i1];
    	arr[i1] = temp;
    }

    public class TestDemo {
        private String ID;
        private String Values;

        @Override
        public String toString() {
            return "TestDemo{" +
                    "ID='" + ID + '\'' +
                    ", Values='" + Values + '\'' +
                    '}';
        }

        public TestDemo(String ID, String values) {
            this.ID = ID;
            Values = values;
        }

        public String getID() {
            return ID;
        }

        public void setID(String ID) {
            this.ID = ID;
        }

        public String getValues() {
            return Values;
        }

        public void setValues(String values) {
            Values = values;
        }
    }
}
cht6334961 2019-01-23
  • 打赏
  • 举报
回复
请大家注意 , 比如有3条ID相同的数据 ,随机 ,注意是随机 删掉其中两条 ,请问如何实现 ,感谢两位大哥的回复 。
引用 4 楼 叶遮沉阳 的回复:
没考虑代码执行效率,单从编码方便上给出两个办法,

public class UniqueListTest {

    public List getList(){
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(3);
        list.add(4);
        return list;
    }

    @Test
    public void test(){
        List list = getList();
        Set set = new HashSet<>(list);
        System.out.println(set.toString());
    }

    @Test
    public void test2(){
        List list = getList();
        List tmpList = new ArrayList<>();
        for(Object o : list){
            if(!tmpList.contains(o)){
                tmpList.add(o);
            }
        }
        System.out.println(tmpList.toString());
    }
}
cuthbert4 2019-01-23
  • 打赏
  • 举报
回复
如果id相同,看能不能用异或,两个相同的值异或结果为0
叶遮沉阳 2019-01-23
  • 打赏
  • 举报
回复
没考虑代码执行效率,单从编码方便上给出两个办法,

public class UniqueListTest {

    public List getList(){
        List list = new ArrayList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(3);
        list.add(4);
        return list;
    }

    @Test
    public void test(){
        List list = getList();
        Set set = new HashSet<>(list);
        System.out.println(set.toString());
    }

    @Test
    public void test2(){
        List list = getList();
        List tmpList = new ArrayList<>();
        for(Object o : list){
            if(!tmpList.contains(o)){
                tmpList.add(o);
            }
        }
        System.out.println(tmpList.toString());
    }
}
十八道胡同 2019-01-23
  • 打赏
  • 举报
回复
还有一种思路就是 把List集合中所有元素放到Set集合(Set集合不允许重复,重复会进行校验),然后再把Set放回List集中中

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧