【Java系列】List数据去重的五种有效方法

简介: 目录1:使用java8新特性stream进行List去重 (distinct()方法)2,借助Set的特性进行去重(set和list转换去重)3,遍历List集合,将元素添加到另一个List集合中4,利用set集合特性保持顺序一致去重5,使用list自身方法remove()–>不推荐1:使用java8新特性stream进行List去重 (distinct()方法)public static List<String> delRepeat(Lis.



1:使用java8新特性stream进行List去重 (distinct()方法

public static List<String> delRepeat(List<String> list) {
     List<String> myList = list.stream().distinct().collect(Collectors.toList());
   return myList ;
}

image.gif

2,借助Set的特性进行去重(set和list转换去重

/**
     * 去除重复数据
     * 由于Set的无序性,不会保持原来顺序
     * @param list
     */
    public static List<String> list distinct(List<String> list) {
        final boolean sta = null != list && list.size() > 0;
        List doubleList= new ArrayList();
        if (sta) {
            Set set = new HashSet();
            set.addAll(list);
            doubleList.addAll(set);
        }
        return doubleList;
    }

image.gif

3,遍历List集合,将元素添加到另一个List集合中

// 遍历后判断赋给另一个list集合,保持原来顺序
public static List<String> delRepeat(List<String> list) {
    List<String> listNew = new ArrayList<String>();
    for (String str : list) {
         if (!listNew.contains(str)) {
             listNew.add(str);
         }
     }
    return listNew ;
}

image.gif

4,利用set集合特性保持顺序一致去重

// Set去重并保持原先顺序的两种方法
   public static void delRepeat(List<String> list) {
       //方法一
       List<String> listNew = new ArrayList<String>(new TreeSet<String>(list));
       //方法二
       List<String> listNew2 = new ArrayList<String>(new LinkedHashSet<String>(list));
   }

image.gif

5,使用list自身方法remove()–>不推荐

/**
     * 去除重复数据(一般不推荐)
     * 类似于冒泡排序思想
     * @param list
     */
  public static List<Map<String, Object>> distinct(List<Map<String, Object>> list) {
        if (null != list && list.size() > 0) {
        //循环list集合
            for  ( int  i  =   0 ; i  <  list.size()  -   1 ; i ++ )  {
                for  ( int  j  =  list.size()  -   1 ; j  >  i; j -- )  {
                  // 这里是对象的比较,如果去重条件不一样,在这里修改即可
                    if  (list.get(j).equals(list.get(i)))  {
                        list.remove(j);
                    }
                }
            }
        }
        //得到最新移除重复元素的list
        return list;
    }


相关文章
|
9天前
|
Java
Java中ReentrantLock中tryLock()方法加锁分析
Java中ReentrantLock中tryLock()方法加锁分析
11 0
|
1天前
|
Java
Java接口中可以定义哪些方法?
【4月更文挑战第13天】
4 0
Java接口中可以定义哪些方法?
|
3天前
|
索引 容器
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
06-python数据容器-list列表定义/list的10个常用操作/列表的遍历/使用列表取出偶数
|
7天前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
10 0
|
9天前
|
Java
Java中关于ConditionObject的signal()方法的分析
Java中关于ConditionObject的signal()方法的分析
21 4
|
9天前
|
安全 Java
append在Java中是哪个类下的方法
append在Java中是哪个类下的方法
21 9
|
11天前
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
|
17天前
|
Java
Java通过反射获取类调用方法
Java通过反射获取类调用方法
18 0
|
1月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
18天前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
16 6