List 接口中的 sort 和 forEach 方法

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

  1. sort 函数

功能

对列表中的元素进行排序。

默认使用自然顺序(如数字从小到大,字符串按字典序),也可以通过自定义比较器(Comparator)指定排序规则。

方法签名

void sort(Comparator<? super E> c)

参数Comparator<? super E> c:用于指定排序规则的比较器。如果为 null,则使用元素的自然顺序。

示例:

默认排序(自然顺序)

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

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

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

使用 Comparator 工具类

java 复制代码
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 表达式或方法引用。
    示例
    遍历并打印元素
java 复制代码
List<String> words = Arrays.asList("Java", "Python", "C++");
words.forEach(word -> System.out.println(word));
// 输出:
// Java
// Python
// C++

使用方法引用

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

遍历并修改元素

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

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

java 复制代码
words.replaceAll(String::toUpperCase);
System.out.println(words); // 输出: [JAVA, PYTHON, C++]
  1. 结合使用 sort 和 forEach
java 复制代码
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 引入的函数式编程特性的一部分,能够显著提高代码的简洁性和可读性。

相关推荐
带刺的坐椅8 分钟前
Java MCP 实战:构建跨进程与远程的工具服务
java·ai·solon·mcp
陈敬雷-充电了么-CEO兼CTO12 分钟前
复杂任务攻坚:多模态大模型推理技术从 CoT 数据到 RL 优化的突破之路
人工智能·python·神经网络·自然语言处理·chatgpt·aigc·智能体
yt9483224 分钟前
C#实现CAN通讯接口
java·linux·前端
卷到起飞的数分27 分钟前
Java零基础笔记07(Java编程核心:面向对象编程 {类,static关键字})
java·开发语言·笔记
舌尖上的五香35 分钟前
ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal
java
okok__TXF36 分钟前
Sentinel入门篇【流量治理】
java·sentinel
YOLO大师38 分钟前
华为OD机试 2025B卷 - 小明减肥(C++&Python&JAVA&JS&C语言)
c++·python·华为od·华为od机试·华为od2025b卷·华为机试2025b卷·华为od机试2025b卷
谁他个天昏地暗39 分钟前
Java 实现 Excel 文件对比与数据填充
java·开发语言·excel
xiao5kou4chang6kai41 小时前
【Python-GEE】如何利用Landsat时间序列影像通过调和回归方法提取农作物特征并进行分类
python·gee·森林监测·洪涝灾害·干旱评估·植被变化
kaikaile19951 小时前
使用Python进行数据可视化的初学者指南
开发语言·python·信息可视化