网站备案需要提交什么资料,小程序定制开发报价,搜索引擎优化的简称,甘肃建设厅执业资格注册中心网站前言#xff1a;
还记得在2021我发布的第一篇博客就是关于数组的去重#xff0c;从那一刻开始#xff0c;命运的齿轮开始转动……
扯远了哈哈哈#xff0c;我重新写这篇文章只是想让去重方式更加严谨(ps#xff1a;我才不会说是因为技术成长了#xff0c;看不上之前写的…前言
还记得在2021我发布的第一篇博客就是关于数组的去重从那一刻开始命运的齿轮开始转动……
扯远了哈哈哈我重新写这篇文章只是想让去重方式更加严谨(ps我才不会说是因为技术成长了看不上之前写的了哈哈哈
方式一 依据Set集合的特性使用set去重最简洁高效
/*** 使用set去重** param list*/
private void setDistinct(ListString list) {System.out.println(Set 开始去重条数 list.size());ListString listDistinctResult new ArrayList(new HashSet(list));System.out.println(Set 去重完毕条数 listDistinctResult.size());
}
方式二 使用高级的stream流方式去重可读性高效率高
/*** 使用Stream 去重** param list*/
private void useStreamDistinct(ListString list) {System.out.println(stream 开始去重条数 list.size());ListString listDistinctResult list.stream().distinct().collect(Collectors.toList());System.out.println(stream 去重完毕条数 listDistinctResult.size());
}
方式三 使用list.contain去重效率一般
/*** 使用 list.contain 去重返回一个新集合** param list*/
private void listContainDistinct(ListString list) {System.out.println(contains 开始去重旧集合条数 list.size());ListString listDistinctResult new ArrayList();for (String str : list) {if (!listDistinctResult.contains(str)) {listDistinctResult.add(str);}}System.out.println(contains 去重完毕新集合条数 listDistinctResult.size());
}
方式四
喜闻乐见的for循环去重(最常见数据量大不建议使用)
/*** 使用for循环去重* param list*/
private void useForDistinct(ListString list) {System.out.println(list 双循环 开始去重条数 list.size());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);}}}System.out.println(list 双循环 去重完毕条数 list.size());
}
特殊情况
以上都是简单的list集合去重但是当我们遇到一些特殊情况比如当一个集合中存的是MapMap中有一些键值是重复而我们需要去除这些重复的对象以上的三种方式就不太适用了这种情况就只能使用多层级for循环来做了(这种复杂情况应该可以使用stream来做不过没试过就不说了)当然数据量大的话肯定效率是比较吃紧的因此如果在不需要数据实时同步的情况下可以考虑新开线程去执行这个去重然后走之后的业务流程
这种特殊情况的代码如下
/*** 数组去重* (目前仅针对于前三列相同进行去重* 例如业务层面来讲即当用户名身份证手机号邮箱等重要信息都相同时* 去除这一重复数据)* * param dataList* return*/private ListMapInteger, String removeSameMapData(ListMapInteger, String dataList) {int i 0;ListMapInteger, String distinctList new ArrayList();for (MapInteger, String map : dataList) {boolean isDuplicate false;for (MapInteger, String distinctMap : distinctList) {for (Map.EntryInteger, String entry : map.entrySet()) {Integer key entry.getKey();if (key 3 StringUtils.equals(map.get(key), distinctMap.get(key))){i ;}if (i 3){i 0;isDuplicate true;break;}}}if (!isDuplicate) {distinctList.add(map);}}return distinctList;}