Java Stream() 流根据对象属性去重
代码
方式一:
根据stream内置方法去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // 引入了两个静态方法,以及通过 TreeSet<> 来达到获取不同元素的效果 import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; // 初始化 List<User> userList = new ArrayList<User>() {{ add( new User(1L, "张一" , "男" )); add( new User(1L, "张一" , "男" )); add( new User(2L, "张二" , "男" )); add( new User(3L, "张三" , "男" )); add( new User(4L, "张四" , "女" )); add( new User(4L, "张四" , "男" )); add( new User(5L, "张五" , "男" )); add( new User(5L, "张六" , "男" )); add( new User(5L, "张七" , "男" )); }}; // 筛选,根据User对象ID属性去重,并创建新的集合存放筛选过后的对象 List<User> collect = userList.stream().collect( collectingAndThen( toCollection(() -> new TreeSet<>(Comparator.comparing(User::getId))), ArrayList:: new ) ); // 打印 for (User user : collect) { System. out .println( "user = " + user); } |
方式二:
根据Map的Key不能重复的方式进行去重
Collectors.toMap使用方法:https://www.cnblogs.com/lucky-jun/p/16469369.html
1 2 3 4 5 6 7 8 9 10 11 12 | //Collectors.toMap(Map的key, Map的value, 当key重复时使用使用哪个key) // 去重 Map<String, User> collect = userList.stream().collect(Collectors.toMap(User::getId, u -> u, (key1, key2) -> key1)); // 打印,打印结果可能与下述截图排序有区别,但结果一致 Set<String> keySet = collect.keySet(); Iterator<String> iterator = keySet.iterator(); while (iterator.hasNext()) { String key = iterator.next(); User user = collect.get(key); System.out.println(user); } |
打印结果
作者:假装空白
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。
分类:
Java学习——笔记
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用