zoukankan      html  css  js  c++  java
  • List数据去重的五种有效方法

    方案一:借助Set的特性进行去重

         /**
         * 去除重复数据
         * 由于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;
        }

    方案二 : 利用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));
       }

    方案三 : 使用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;
        }

    方案四 : 遍历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 ;
    }

    方案5 : 使用Java8特性去重

    public static List<String> delRepeat(List<String> list) {
         List<String> myList = list.stream().distinct().collect(Collectors.toList());
         return myList ;
    }
  • 相关阅读:
    POJ 2251 Dungeon Master(BFS)
    POJ 1321 棋盘问题 (DFS + 回溯)
    POJ 3009 Curling 2.0(DFS + 模拟)
    Codeforces 702D Road to Post Office(模拟 + 公式推导)
    Codeforces 702A Maximum Increase(dp)
    Codeforces 702C Cellular Network(二分)
    Codeforces 702B Powers of Two
    POJ 3083 Children of the Candy Corn (DFS + BFS + 模拟)
    POJ 2488 A Knight's Journey (回溯法 | DFS)
    POJ1094 Sorting It All Out (拓扑排序)
  • 原文地址:https://www.cnblogs.com/mike-mei/p/15015458.html
Copyright © 2011-2022 走看看