List去重,List过滤null值

List去重

参考来源:blog.csdn.net/qq3434569/article/details/100520524

01、使用两个for循环去重(有序,不建议)

    /**使用两个for循环实现List去重(有序)
     *
     * @param list
     * */
    public static List removeDuplicationBy2For(List<Integer> list) {
        for (int i=0;i<list.size();i++)
        {
            for (int j=i+1;j<list.size();j++)
            {
                if(list.get(i).equals(list.get(j))){
                    list.remove(j);
                }
            }
        }
        return list;
    }

02、使用List集合contains方法循环遍历(有序)

    /**使用List集合contains方法循环遍历(有序)
     *
     * @param list
     * */
    public static List removeDuplicationByContains(List<Integer> list) {
        List<Integer> newList =new ArrayList<>();
        for (int i=0;i<list.size();i++)
        {
            boolean isContains =newList.contains(list.get(i));
            if(!isContains){
                newList.add(list.get(i));
            }
        }
        list.clear();
        list.addAll(newList);
        return list;
    }

03、使用HashSet去重(无序)

    /**使用HashSet实现List去重(无序)
     *
     * @param list
     * */
    public static List removeDuplicationByHashSet(List<Integer> list) {
        HashSet set = new HashSet(list);
        //把List集合所有元素清空
        list.clear();
        //把HashSet对象添加至List集合
        list.addAll(set);
        return list;
    }

04、使用LinkedHashSet去重

LinkedHashSet是在一个ArrayList删除重复数据的最佳方法。LinkedHashSet在内部完成两件事:

  • 删除重复数据
  • 保持添加到其中的数据的顺序

Java示例使用LinkedHashSet删除arraylist中的重复项。在给定的示例中,numbersList是包含整数的arraylist,其中一些是重复的数字。

例如1,3和5.我们将列表添加到LinkedHashSet,然后将内容返回到列表中。结果arraylist没有重复的整数。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
 
public class ArrayListExample
 
{
    public static void main(String[] args)
 
    {
 
        ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
 
        System.out.println(numbersList);
 
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);
 
        ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);
 
        System.out.println(listWithoutDuplicates);
 
    }
 
}

输出结果

[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
 
[1, 2, 3, 4, 5, 6, 7, 8]

05、使用TreeSet去重(有序)

    /**使用TreeSet实现List去重(有序)
     *
     * @param list
     * */
    public static List removeDuplicationByTreeSet(List<Integer> list) {
        TreeSet set = new TreeSet(list);
        //把List集合所有元素清空
        list.clear();
        //把HashSet对象添加至List集合
        list.addAll(set);
        return list;
    }

06、使用java8新特性stream去重(有序)

    /**使用java8新特性stream实现List去重(有序)
     *
     * @param list
     * */
    public static List removeDuplicationByStream(List<Integer> list) {
        List newList = list.stream().distinct().collect(Collectors.toList());
        return newList;
    }

效率测试代码

    public static void main(String args[]) {
        List<Integer> list1 = new ArrayList<>();
        List<Integer> list2 = new ArrayList<>();
        List<Integer> list3 = new ArrayList<>();
        List<Integer> list4 = new ArrayList<>();
        List<Integer> list5 = new ArrayList<>();
        Random random =new Random();
        for (int i = 0; i < 100000; i++) {
            int value =random.nextInt(500);
            list1.add(value);
            list2.add(value);
            list3.add(value);
            list4.add(value);
            list5.add(value);
        }
        long startTime ;
        long endTime;
        startTime = System.currentTimeMillis();
        removeDuplicationByHashSet(list1);
        endTime = System.currentTimeMillis();
        System.out.println("使用HashSet实现List去重时间:"+(endTime-startTime)+"毫秒");
        startTime = System.currentTimeMillis();
        removeDuplicationByTreeSet(list2);
        endTime = System.currentTimeMillis();
        System.out.println("使用TreeSet实现List去重时间:"+(endTime-startTime)+"毫秒");
        startTime = System.currentTimeMillis();
        removeDuplicationByStream(list3);
        endTime = System.currentTimeMillis();
        System.out.println("使用java8新特性stream实现List去重:"+(endTime-startTime)+"毫秒");
        startTime = System.currentTimeMillis();
        removeDuplicationBy2For(list4);
        endTime = System.currentTimeMillis();
        System.out.println("使用两个for循环实现List去重:"+(endTime-startTime)+"毫秒");
        startTime = System.currentTimeMillis();
        removeDuplicationByContains(list5);
        endTime = System.currentTimeMillis();
        System.out.println("使用List集合contains方法循环遍历:"+(endTime-startTime)+"毫秒");
 
    }

结果:

  • 使用HashSet实现List去重时间:40毫秒
  • 使用TreeSet实现List去重时间:36毫秒
  • 使用java8新特性stream实现List去重:78毫秒
  • 使用两个for循环实现List去重:533毫秒
  • 使用List集合contains方法循环遍历:40毫秒

更多测试结果

随机数在100范围内:

  • 使用HashSet实现List去重时间:32毫秒
  • 使用TreeSet实现List去重时间:40毫秒
  • 使用java8新特性stream实现List去重:128毫秒
  • 使用两个for循环实现List去重:693毫秒
  • 使用List集合contains方法循环遍历:30毫秒

随机数在1000范围内:

  • 使用HashSet实现List去重时间:34毫秒
  • 使用TreeSet实现List去重时间:72毫秒
  • 使用java8新特性stream实现List去重:125毫秒
  • 使用两个for循环实现List去重:1063毫秒
  • 使用List集合contains方法循环遍历:85毫秒

随机数在10000范围内:

  • 使用HashSet实现List去重时间:51毫秒
  • 使用TreeSet实现List去重时间:103毫秒
  • 使用java8新特性stream实现List去重:201毫秒
  • 使用两个for循环实现List去重:5448毫秒
  • 使用List集合contains方法循环遍历:791毫秒

结论

无序HashSet,有序TreeSet

List去除null值

1、使用系统API

public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("3");
        list.add(null);
        list.add(null);
        list.removeAll(Collections.singleton(null));
        System.out.println("list = " + list); //输出结果为3
    }

2、Stream流过滤null值

    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("3");
        list.add(null);
        list.add(null);
//        list.removeAll(Collections.singleton(null));
        List<String> collectCode = list.stream().filter(x -> x != null).collect(Collectors.toList());
        System.out.println("collectCode = " + collectCode); //输出结果为3
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现JavaList<Map>的去重,可以使用以下方法: 引用\[1\]中的示例代码展示了如何使用HashMap来实现去重。首先,创建一个新的HashMap对象作为去重后的结果容器。然后,遍历原始的List<Map>,对于每个Map对象,检查其value是否已经存在于新的HashMap中。如果不存在,则将该Map对象添加到新的HashMap中。最后,打印出去重后的结果。 引用\[2\]中的示例代码展示了如何使用ArrayList的removeAll和addAll方法来实现去重。首先,创建两个ArrayList对象,分别存储原始的List<Map>和需要去重List<Map>。然后,使用removeAll方法将原始的List<Map>中与需要去重List<Map>中相同的元素移除。最后,使用addAll方法将需要去重List<Map>中的元素添加到原始的List<Map>中。最终,打印出去重后的结果。 引用\[3\]中的示例代码展示了如何使用Java 8的Stream API来实现List<Map>的去重。首先,使用stream方法将List<Map>转换为Stream对象。然后,使用filter方法和distinctByKey方法来过滤出不重复的Map对象。最后,使用collect方法将过滤后的结果收集到一个新的List中。最终,得到去重后的结果。 综上所述,可以根据具体需求选择适合的方法来实现List<Map>的去重。 #### 引用[.reference_title] - *1* *2* [javaList和Map的去重](https://blog.csdn.net/qingfoo/article/details/25284957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java8 List<Map> 根据map对象某个字段去重。](https://blog.csdn.net/weixin_40482816/article/details/117248416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值