当前位置: 首页 > news >正文

List 接口中的 sort 和 forEach 方法

List 接口中的 sort 和 forEach 方法是 Java 8 引入的两个非常实用的函数,分别用于 排序 和 遍历 列表中的元素。以下是它们的详细介绍和用法:

  1. sort 函数

功能

对列表中的元素进行排序。
默认使用自然顺序(如数字从小到大,字符串按字典序),也可以通过自定义比较器(Comparator)指定排序规则。
方法签名
void sort(Comparator<? super E> c)
参数Comparator<? super E> c:用于指定排序规则的比较器。如果为 null,则使用元素的自然顺序。
示例:
默认排序(自然顺序)

List<Integer> numbers = Arrays.asList(5, 3, 8, 1);
numbers.sort(null); // 使用自然顺序
System.out.println(numbers); // 输出: [1, 3, 5, 8]

自定义排序(使用比较器)

List<String> words = Arrays.asList("Java", "Python", "C++");
words.sort((s1, s2) -> s1.length() - s2.length()); // 按字符串长度排序
System.out.println(words); // 输出: [C++, Java, Python]

使用 Comparator 工具类

List<String> words = Arrays.asList("Java", "Python", "C++");
words.sort(Comparator.comparingInt(String::length)); // 按字符串长度排序
System.out.println(words); // 输出: [C++, Java, Python]
  1. forEach 函数
    功能:
    遍历列表中的每个元素,并对每个元素执行指定的操作。
    通常用于简化遍历逻辑。
    方法签名
    void forEach(Consumer<? super E> action)
    参数Consumer<? super E> action:对每个元素执行的操作,通常是一个 Lambda 表达式或方法引用。
    示例
    遍历并打印元素
List<String> words = Arrays.asList("Java", "Python", "C++");
words.forEach(word -> System.out.println(word));
// 输出:
// Java
// Python
// C++

使用方法引用

List<String> words = Arrays.asList("Java", "Python", "C++");
words.forEach(System.out::println); // 使用方法引用
// 输出:
// Java
// Python
// C++

遍历并修改元素

List<String> words = Arrays.asList("Java", "Python", "C++");
words.forEach(word -> word = word.toUpperCase()); // 注意:这里不会修改原列表
System.out.println(words); // 输出: [Java, Python, C++]

如果需要修改元素,可以使用 replaceAll 方法:

words.replaceAll(String::toUpperCase);
System.out.println(words); // 输出: [JAVA, PYTHON, C++]
  1. 结合使用 sort 和 forEach
List<String> words = Arrays.asList("Java", "Python", "C++");

// 按字符串长度排序
words.sort(Comparator.comparingInt(String::length));

// 遍历并打印排序后的元素
words.forEach(System.out::println);

// 输出:
// C++
// Java
// Python
  1. 总结
    在这里插入图片描述

sort:用于排序,支持自然顺序和自定义比较器。
forEach:用于遍历,简化代码逻辑。
这两个函数是 Java 8 引入的函数式编程特性的一部分,能够显著提高代码的简洁性和可读性。

相关文章:

  • Linux-GlusterFS进阶分布式卷
  • python 虚拟机的使用方式
  • 实验-安装Proteus
  • 大模型监督微调(SFT)技术解析
  • Open-WebUI前后端分离部署并基于DeepSeek实现智能问答
  • 虚拟机从零实现机器人控制
  • 安全面试2
  • 被裁20240927 --- WSL-Ubuntu20.04安装cuda、cuDNN、tensorRT
  • PHP post 数据丢失问题
  • .NET MVC实现电影票管理
  • 【NLP 31、预训练模型的发展过程】
  • 游戏引擎学习第118天
  • java开发——为什么要使用动态代理?
  • 0222-leetcode-1768.交替合并字符串、389找不同、
  • 异步联邦学习的动态隐私保护框架:重构边缘智能的数据安全边界
  • 采用sidecar模式,将127.0.0.1的请求打到目标机器
  • 网页制作06-html,css,javascript初认识のhtml如何建立超链接
  • Linux: network:driver: rx_crc_errors_phy rx_symbol_err_phy
  • 有哪些开源大数据处理项目使用了大模型
  • vue3父子组件props传值,defineprops怎么用?(组合式)
  • 成就彼此,照亮世界:“中欧建交50周年论坛”在沪成功举行
  • 智利观众也喜欢上海的《好东西》
  • 数理+AI+工程,上海交大将开首届“笛卡尔班”招生约20名
  • 上海交大:关注到对教师邵某的网络举报,已成立专班开展调查
  • 招行:拟出资150亿元全资发起设立金融资产投资公司
  • 鸿蒙电脑正式亮相,五年布局积累超2700项核心专利