需要用到根据gpsTime double类型对List进行去重;
尝试了俩种办法,就像知道耗时与性能;

1. 法一:


// 根据gpsTime去重
imagePostList = imagePostList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparing(n -> n.getGpsTime()))), ArrayList::new));

2. 法二:

// List遍历的同时删除元素需要用Iterator迭代元素,否则会报错
Set<Double> gpsTimeSet = new HashSet<>();
// 删除重复的元素
Iterator<ImagePost> iterator = imagePostList.iterator();
while (iterator.hasNext()) {ImagePost imagePost = iterator.next();if (gpsTimeSet.contains(imagePost.getGpsTime())) {log.error("duplicate: id: {}, name: {}, gpsTime: {}", imagePost.getId(), imagePost.getName(), imagePost.getGpsTime());iterator.remove();} else {gpsTimeSet.add(imagePost.getGpsTime());}
}

3. 结果

少量数据发现是 Iterator遍历删除效率更高

那么数据量很大的情况下呢?

很明显,数据量大的时候,还是用Iterator迭代的同时删除重复元素效率更高一些;
多次运行,效果一致,仍然是Iterator更高效

4. 源代码

import java.util.*;import static java.util.Comparator.comparing;
import static java.util.stream.Collectors.collectingAndThen;
import static java.util.stream.Collectors.toCollection;/************************************** Class Name: TestRemoveDuplicateGpsTime* Description:〈测试去重gpsTime效率〉* @create 2020/10/16* @since 1.0.0************************************/
public class TestRemoveDuplicateGpsTime {public static void main(String[] args) {TestRemoveDuplicateGpsTime test = new TestRemoveDuplicateGpsTime();test.testEfficency();}public void testEfficency() {List<ImagePost> imagePostList = new ArrayList<>();initImagePost(imagePostList);long time1 = System.currentTimeMillis();// 根据gpsTime去重imagePostList = imagePostList.stream().collect(collectingAndThen(toCollection(() -> new TreeSet<>(comparing(n -> n.getGpsTime()))), ArrayList::new));long time2 = System.currentTimeMillis();System.out.println("当前程序耗时:" + (time2 - time1) + "ms");System.out.println("after GpsTime去重size: " + imagePostList.size());System.out.println("-----------------------------------------------");imagePostList.clear();initImagePost(imagePostList);time1 = System.currentTimeMillis();removeDuplicate(imagePostList);time2 = System.currentTimeMillis();System.out.println("当前程序耗时:" + (time2 - time1) + "ms");}public void removeDuplicate(List<ImagePost> imagePostList) {Set<Double> gpsTimeSet = new HashSet<>();// 删除重复的元素Iterator<ImagePost> iterator = imagePostList.iterator();while (iterator.hasNext()) {ImagePost imagePost = iterator.next();if (gpsTimeSet.contains(imagePost.getGpsTime())) {System.out.println("duplicate: id: " + imagePost.getId() + ",gpsTime: " + imagePost.getGpsTime());iterator.remove();} else {gpsTimeSet.add(imagePost.getGpsTime());}}System.out.println("after removeDuplicate, count: " + imagePostList.size());}public void initImagePost(List<ImagePost> imagePostList) {imagePostList.add(new ImagePost(1, 11472.15475));imagePostList.add(new ImagePost(2, 11476.1));imagePostList.add(new ImagePost(3, 11475.2));imagePostList.add(new ImagePost(4, 11332.1));imagePostList.add(new ImagePost(5, 11433.5));imagePostList.add(new ImagePost(6, 11472.15475));imagePostList.add(new ImagePost(7, 11476.1));imagePostList.add(new ImagePost(8, 11987.32));}class ImagePost {Integer id;double gpsTime;public ImagePost(Integer id, double gpsTime) {this.id = id;this.gpsTime = gpsTime;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public double getGpsTime() {return gpsTime;}public void setGpsTime(double gpsTime) {this.gpsTime = gpsTime;}}
}

参考:

-https://www.cnblogs.com/qq1141100952com/p/11197120.html

Java测试List<Object>根据其某个属性去重俩种方法效率相关推荐

  1. java set 操作_java:Set循环遍历的俩种方法使用

    java:Set循环遍历的俩种方法使用 package collection; import java.util.*; public class NewSet { public static void ...

  2. 关于清空object对象里的属性的两种方法

    最近碰到一个问题,就是要清空对象里的属性,我想了两个方法,做个结果的记录,都是自己的想法,有不对的地方请指教 var obj={}; //对象里的属性自己看着写吧 第一种方法: obj=null; 这 ...

  3. 遍历对象属性_细说JS遍历对象属性的N种方法

    本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...

  4. php类3个属性是哪3种,PHP获取类私有属性的3种方法

    今天在推上看到一条获取php类私有属性的推文,感觉很有意思: 顺着推文联想,还有其他方式吗?经过自己的测试及网上答案,总结出三种方法: 1. 反射 反射可以获取类的详细信息,要获取私有属性的值,只需将 ...

  5. js之删除对象属性的三种方法 判断对象中是否有某一属性的四种方法

    js之删除对象属性的三种方法 & 判断对象中是否有某一属性的四种方法 示例 1.基础版 var a = { id: 18, age: 20, name: "zhangsan" ...

  6. java整型转换为数组_基于java中byte数组与int类型的转换(两种方法)

    java中byte数组与int类型的转换,在网络编程中这个算法是最基本的算法,我们都知道,在socket传输中,发送.者接收的数据都是 byte数组,但是int类型是4个byte组成的,如何把一个整形 ...

  7. calc ie支持_让IE6/IE7/IE8支持CSS3属性的8种方法介绍

    让IE6/IE7/IE8支持CSS3属性的8种方法介绍 发布时间:2013-09-23 10:43:06   作者:佚名   我要评论 IE浏览器暂不支持CSS3的一些属性.国外的工程师们,不安于此现 ...

  8. js给对象动态添加属性的2种方法

    js给对象动态添加属性的2种方法 需求: 要给每个课程添加一个判断鼠标是否hover 分析: 因为数据是动态渲染的,所以需要动态的给他添加一个flag标记,就得在数据渲染之前先拿到,然后再添加一个自己 ...

  9. java mvc 绑定_关于Java:Spring MVC:将请求属性绑定到控制器方法参数

    在Spring MVC中,很容易将请求参数绑定到处理请求的方法参数. 我只是使用@RequestParameter("name"). 但是我可以对request属性做同样的事情吗? ...

最新文章

  1. 人工智能时代,程序员要不要精通算法?
  2. 参加完Python培训可以做什么
  3. 有赞分层自动化测试实践
  4. 【MATLAB】基本绘图 ( 线条设定 | 线条设定组合 )
  5. 论文排版怕翻车?这个排版神器赶紧用起来!
  6. MyApplicationToast工具类
  7. 框架源码深入需要准备的知识之解析XML
  8. composer 介绍及安装
  9. 计算机主机检测不到耳机,win10电脑检测不到耳机的原因及处理方法
  10. 抖音直播睡觉一晚赚7.6万,心态崩了
  11. 【Unity学习笔记】——基础篇:关于光照GI
  12. 自然语言处理 第二期
  13. php linux OpenOffice+JODConverter+php实现将word/ppt/excel文档转换为pdf
  14. 程序员心理小测试:你是否患上抑郁症?
  15. 儿童学编程的原因以及方法
  16. 元宇宙瞎想,现在手机弄个抖音啥的都戒不掉,以后元宇宙估计更上瘾了,有时间还是静静的看书学习更好
  17. MyEclipse7.02注册码
  18. python gui 三维 pyqt5_【PyQt5-Qt Designer】在GUI中使用pyqtgraph绘图库
  19. C++利用opencv调用pytorch训练好的分类模型
  20. 啥?下载的文件显示“文件已损坏,无法打开”?

热门文章

  1. 2021年大数据ELK(八):Elasticsearch安装IK分词器插件
  2. Android ProgressBar 加载中界面实现(loading 动画) 实现菊花的效果
  3. Android TextView 去除顶部和底部留白(上下的间距有空白问题处理)
  4. 微信小程序web-view使用
  5. CF525D Arthur and Walls
  6. 为什么很多网站的验证码都设置得肉眼都很难识别?
  7. 简析平衡树(三)——浅谈Splay
  8. 公用表达式 CTE with as 用法总结
  9. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)
  10. linux内核内存管理(zone_dma zone_normal zone_highmem)