news 2026/4/30 2:10:06

331. Java Stream API - Java Stream 实战案例:找出合作最多的作者对

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
331. Java Stream API - Java Stream 实战案例:找出合作最多的作者对

文章目录

  • 331. Java Stream API - Java Stream 实战案例:找出合作最多的作者对
    • 🎯 目标
    • 🧩 数据模型设计
    • 🏗️ 构建作者对流
    • 🔁 展平所有文章的作者对
    • 📊 构建作者对出现频次的直方图
    • 🥇 找出合作最多的一对作者
    • 🧪 示例数据和完整运行逻辑
    • 💡 小结与思考

331. Java Stream API - Java Stream 实战案例:找出合作最多的作者对

🎯 目标

在一堆文章(Article)中,找出一起合作写文章次数最多的两个作者(Author)


🧩 数据模型设计

我们有三个核心模型:

// 作者,支持按名字排序recordAuthor(Stringname)implementsComparable<Author>{publicintcompareTo(Authorother){returnthis.name.compareTo(other.name);}}// 文章recordArticle(Stringtitle,intinceptionYear,List<Author>authors){}// 作者对(避免重复,如 A-B 和 B-A 视为同一对)recordPairOfAuthors(Authorfirst,Authorsecond){publicstaticOptional<PairOfAuthors>of(Authorfirst,Authorsecond){// 确保作者对排序一致(避免 A-B 和 B-A)if(first.compareTo(second)>0){returnOptional.of(newPairOfAuthors(first,second));}else{returnOptional.empty();}}}

📌PairOfAuthors.of()Optional表示“是否是有效的作者对”,这样可以方便后续的流式处理。


🏗️ 构建作者对流

第一步是:从每篇文章中提取所有合法的作者对。

BiFunction<Article,Author,Stream<PairOfAuthors>>buildPairOfAuthors=(article,firstAuthor)->article.authors().stream().flatMap(secondAuthor->PairOfAuthors.of(firstAuthor,secondAuthor).stream());

🔍 如果PairOfAuthors.of()返回Optional.empty(),那么stream()就是空流,否则是单元素流。这样可以优雅地处理无效对。


🔁 展平所有文章的作者对

Function<Article,Stream<PairOfAuthors>>toPairOfAuthors=article->article.authors().stream().flatMap(firstAuthor->buildPairOfAuthors.apply(article,firstAuthor));

💡 我们对每篇文章的作者使用flatMap(),构建所有可能的作者对(去除无效)。


📊 构建作者对出现频次的直方图

Map<PairOfAuthors,Long>numberOfAuthorsTogether=articles.stream().flatMap(toPairOfAuthors).collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));

📦 用groupingBy+counting()聚合每对作者出现的次数。


🥇 找出合作最多的一对作者

Function<Map<PairOfAuthors,Long>,Map.Entry<PairOfAuthors,Long>>maxExtractor=map->map.entrySet().stream().max(Map.Entry.comparingByValue()).orElseThrow();

☂️orElseThrow()会在没有任何作者对时抛异常,所以要确保至少有一篇文章包含两个作者。


🧪 示例数据和完整运行逻辑

varmaria=newAuthor("Maria");varjames=newAuthor("James");varpatricia=newAuthor("Patricia");varmichael=newAuthor("Michael");vararticles=List.of(newArticle("About As You Like It",2015,List.of(maria)),newArticle("About King John",2015,List.of(james)),newArticle("About The Winter's Tale",2016,List.of(patricia)),newArticle("About Richard II",2017,List.of(michael)),newArticle("About Richard III",2019,List.of(maria,patricia)),newArticle("About Henry VIII",20219,List.of(patricia,michael)),newArticle("About Romeo and Juliet",2020,List.of(maria,patricia,james)),newArticle("About Macbeth",2021,List.of(maria,james,michael)),newArticle("About Hamlet",2021,List.of(patricia,james,michael)),newArticle("About King Lear",2022,List.of(maria,james,patricia,michael)));Map.Entry<PairOfAuthors,Long>pair=maxExtractor.apply(numberOfAuthorsTogether);System.out.println("The authors that published the most together are "+pair.getKey().first().name()+" and "+pair.getKey().second().name()+", they wrote "+pair.getValue()+" articles together.");

🧾输出结果:

Theauthors that published the most together arePatriciaandMichael,they wrote3articles together.

💡 小结与思考

✅ 使用Optional.stream()可以优雅处理“可能不存在”的值
✅ 用flatMap()组合嵌套结构(多个 List 变为流)
groupingBy + counting构建频次统计
max()+orElseThrow()获取最大值时要注意异常安全性

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/30 2:08:51

ChatTTS下载PC版实战:AI辅助开发中的语音合成集成方案

最近在做一个需要语音播报功能的桌面应用&#xff0c;项目要求语音合成必须本地化部署&#xff0c;不能依赖网络服务。经过一番调研和折腾&#xff0c;最终选择了 ChatTTS 作为核心引擎&#xff0c;并围绕它构建了一套完整的集成方案。整个过程踩了不少坑&#xff0c;也积累了一…

作者头像 李华
网站建设 2026/4/18 21:27:03

写作压力小了!10个降AI率工具测评:专科生必看的降AI率神器推荐

在如今的学术写作中&#xff0c;AI生成内容已经成为了许多学生不得不面对的问题。尤其是对于专科生来说&#xff0c;论文写作不仅需要扎实的学术基础&#xff0c;还要应对日益严格的查重和AIGC检测标准。如何在不改变原意的前提下&#xff0c;有效降低AI痕迹、提升论文的原创性…

作者头像 李华
网站建设 2026/4/18 21:28:00

C++流程控制语句:构建结构化程序的核心

C 流程控制语句&#xff1a;构建结构化程序的核心 C 的流程控制语句是编写清晰、可读、可维护代码的基础。结构化程序设计的核心思想就是&#xff1a;任何复杂的逻辑都可以用三种基本结构组合实现——顺序结构、选择结构、循环结构。 下面按实际使用频率和重要程度&#xff0…

作者头像 李华
网站建设 2026/4/18 21:27:04

Seedance 2.0算力优化黄金三角模型(资源粒度×调度频率×精度容忍度):20年分布式系统专家手写注释版源码全解析

第一章&#xff1a;Seedance 2.0 算力成本优化策略Seedance 2.0 在分布式训练与推理场景中&#xff0c;将单位算力成本降低达 37%&#xff0c;核心在于重构资源调度模型、引入动态精度感知机制及强化 GPU 显存复用能力。其优化不依赖硬件堆叠&#xff0c;而是通过软件栈协同实现…

作者头像 李华