CodeGym
促销
学习
课程
任务
调查 & 测验
游戏
帮助
日程
社区
Users
论坛
聊天
文章
成功故事
动态
评价
订阅
浅色主题

课时

  • 评论
  • 关于我们
开始
开始学习
立即开始学习
  • 我的进度
  • 课程
  • 任务地图
  • 课程
  • groupingBy 和 partitioningBy 方法(Collectors)

    JAVA 25 SELF
    等级 31,课时 2
    在本讲中,我们学习如何在流中使用收集器 Collectors.groupingBy 和 Collectors.partitioningBy 进行数据分组:简单与嵌套分组、按布尔条件拆分、如何在二者之间做选择、结果处理与一些小技巧。通过字符串、数字和对象的实战示例,你将看到如何从 Stream API 的流中获得所需结构的 Map,以及如何与特征函数( Function)和谓词( Predicate)配合使用。最后——解析常见错误。
    可用
  • 高级聚合:嵌套分组

    JAVA 25 SELF
    等级 31,课时 3
    使用 Stream 与收集器深入实践嵌套分组:如何将 Collectors.groupingBy 与聚合器( maxBy、 averagingInt、 counting)组合,使用 mapping 变换数据,通过 partitioningBy 划分子集,并正确读取嵌套的 Map 结构。包含大量直观示例、结果结构可视化以及常见错误解析。
    可用
  • 高级收集器

    JAVA 25 SELF
    等级 31,课时 4
    在本讲中,我们解析 Stream API 中的高级收集器用法:为 groupingBy/ partitioningBy 配置嵌套的下游(downstream)收集器,使用 mapping 做转换,使用 filtering 做过滤,使用 flatMapping 做“展开”,使用 teeing(Java 12+)做同时聚合,以及通过 toUnmodifiableList/Set/Map 与 collectingAndThen 实现集合的“冻结”。我们会展示实用的流水线与常见错误。
    可用
  • flatMap 和 mapMulti 方法

    JAVA 25 SELF
    等级 32,课时 0
    在本讲中,我们将讲解通过 map 进行的数据转换、用于“扁平化”的 flatMap,以及自 Java 16+ 起提供的更高效替代方案 — mapMulti。通过实用示例直观展示如何把嵌套集合解包为 Stream<String>(而不是 Stream<Stream<String>>)、如何通过 Optional 的 stream() 进行处理,以及在不创建中间流的情况下,为了性能何时选择 mapMulti。
    可用
  • join、concat 方法:合并流

    JAVA 25 SELF
    等级 32,课时 1
    本讲将讲解在 Stream API 中合并数据的方法:用于两个流的静态方法 Stream.concat,针对任意数量流的组合 Stream.of + flatMap,以及把元素粘合为一个字符串的收集器 Collectors.joining。我们会讨论惰性、流的一次性、顺序保持以及常见错误(重复使用同一流、无限流、对非字符串使用 joining)——配有直观示例。
    可用
  • 集合的 union、intersection、difference 操作

    JAVA 25 SELF
    等级 32,课时 2
    在本讲中,我们将讲解 Java 中对集合的常见操作:并集( union)、交集( intersection)和差集( difference),基于接口 Set 与 Stream API。展示了使用 Stream.concat、 Stream.of + flatMap 的实战示例,以及通过 retainAll/ removeAll 的替代方案,并强调了关于 equals/ hashCode、性能与常见错误的重要细节。
    可用
  • zip(拉链),流的生成(iterate、generate)

    JAVA 25 SELF
    等级 32,课时 3
    在本讲中我们将弄清什么是 zip,以及为什么标准的 Stream API(直到 Java 22)里没有它;学习如何通过索引使用 IntStream.range 来“缝合”集合,并使用 Stream.iterate 和 Stream.generate “即时”创建流。示例、可视化和常见错误会帮助你在任务中自如地应用生成与 zip。
    可用
  • 流式处理常见错误解析

    JAVA 25 SELF
    等级 32,课时 4
    Java 中 Stream API 常见错误的详细指南:流的一次性特性与重复终止操作( collect()、 forEach()、 count())、遍历期间修改集合、在无限流( iterate、 generate)上忘记使用 limit()、对 null 的处理以及通过 flatMap(Optional::stream) 使用 Optional、用 forEachOrdered() 保持顺序、用 Set 高效进行集合运算、正确关闭资源( Files.lines + try-with-resources)、谨慎使用 parallelStream(),以及“没有终止操作就不会执行”的原则。所有问题都配有清晰的示例与修正。
    可用
  • 原始类型流与装箱(boxing)成本

    JAVA 25 SELF
    等级 33,课时 0
    在本讲中,我们将解释为什么处理数字集合时使用常规流( Stream<Integer>、 Stream<Double>)会因装箱/拆箱(boxing/unboxing)而可能效率低下,以及原始类型流—— IntStream、 LongStream、 DoubleStream——如何避免这些问题。我们将讨论 mapToInt/ boxed() 的转换、聚合操作( sum()、 average()、 summaryStatistics())、使用 OptionalInt/ OptionalDouble 获取安全结果,以及在哪些场景优化确实带来提升,并如何用 JMH 衡量效果。
    可用
  • Stream API 中的惰性求值(lazy evaluation)

    JAVA 25 SELF
    等级 33,课时 1
    在本讲中,我们讲解 Stream API 中的惰性求值:中间操作与终端操作有什么区别,为什么只有在调用终端操作后计算才会启动,逐元素处理与“短路操作”能带来哪些优势。我们会演示包含 filter、 map、 peek、 findFirst、 forEach 的链式调用,直观展示元素的流转,并分析常见错误以及关于高效安排操作顺序的建议。
    可用
  • 不可变集合:Collections.unmodifiable

    JAVA 25 SELF
    等级 33,课时 2
    本讲将讲解如何使用不可变包装器 Collections.unmodifiableList、 unmodifiableSet、 unmodifiableMap 来保护数据,“浅层”不可变与“深度”不可变有何区别,何时以及为何从方法返回包装器,以及 List.of/ Set.of/ Map.of 等现代替代方案。我们还将讨论常见错误(例如,指望深度不可变,或与 null 一起使用)以及为何修改尝试会抛出 UnsupportedOperationException。
    可用
  • Spliterator 与并行流

    JAVA 25 SELF
    等级 33,课时 3
    在本讲中,我们解析什么是 Spliterator,它不仅能遍历元素,还能通过 trySplit() 将数据源拆分成片段;基于此,并行流通过 parallelStream() 和公共池 ForkJoinPool 工作。展示关键方法( tryAdvance、 estimateSize、 characteristics)、常见特性( ORDERED、 SIZED、 CONCURRENT 等)、实践示例、Mermaid 图示,以及在使用并行流时的常见错误。
    可用
  • 1
  • ...
  • 14
  • 15
  • 16
  • 17
  • 18
  • ...
  • 30
Learn
  • 注册
  • Java 课程
  • 任务帮助
  • 定价
  • Java 语法
社区
  • 用户
  • 文章
  • 论坛
  • 聊天
  • 成功故事
  • 动态
  • 联盟计划
Company
  • 关于我们
  • 联系方式
  • 评价
  • 媒体中心
  • CodeGym for EDU
  • 常见问题
  • 支持
CodeGymCodeGym 是一个从零开始学习 Java 编程的在线课程。该课程是初学者掌握 Java 的完美方式。它包含 1200+ 个带即时验证的任务,以及必要的 Java 基础理论。为了帮助你在学习中取得成功,我们实现了一系列激励功能:测验、编码项目、关于高效学习的内容,以及 Java 开发者职业相关内容。
关注我们
界面语言
English Deutsch Español हिन्दी Français Português Polski বাংলা
简体中文
मराठी தமிழ் Italiano Bahasa Indonesia 繁體中文 Nederlands 日本語 한국어 Bulgarian Danish Hungarian Basa Jawa Malay Norwegian Romanian Swedish Telugu Thai Українська Filipino Turkish Azərbaycan Русский Vietnamese
“程序员是培养出来的,不是天生的” © 2026 CodeGym
MastercardVisa
“程序员是培养出来的,不是天生的” © 2026 CodeGym