Lambda表达式和String类的compareTo方法
Lambda表达式
可以将Lambda表达式理解为一个匿名函数; Lambda表达式允许将一个函数作为另外一个函数的参数; 我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),也可以理解为函数式编程,将一个函数作为参数进行传递。
- 实例
1 |
|
为了使这段代码更加简洁,可以使用匿名内部类重构:
1 |
|
继续简化,使用Lambda:
1 |
|
String的compareTo()方法
- 源码
1 |
|
compareTo的逻辑
总结下来就是(o1,o2)-> o1 - o2。这里的减法有三种情况:
- 负数:不交换前后元素的位置
- 正数:交换位置
- 0:不交换
如果数比较大的话还是建议直接用compareTo方法,用减法可能导致溢出,比如Integer.MIN_VALUE - 1。
剑指offer.把数组排成最小的数
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。输出格式为字符串。
样例:
1 |
|
思路:自定义排序规则,
nums[i] < nums[j]
当且仅当nums[i] + nums[j](字符串连接) < nums[j] + nums[i]
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19class Solution {
public String printMinNumber(int[] nums) {
StringBuilder sb = new StringBuilder();
int n = nums.length;
// 将整数数组转换为字符串数组
String[] strNums = new String[n];
for (int i = 0; i < n; i++) {
strNums[i] = String.valueOf(nums[i]);
}
// 自定义排序逻辑,按连接后的字符串进行比较
Arrays.sort(strNums, (o1, o2) -> (o1 + o2).compareTo(o2 + o1));
// 拼接排序后的字符串数组
for (String str : strNums) {
sb.append(str);
}
return sb.toString();
}
}
Lambda表达式和String类的compareTo方法
https://payfish.github.io/2024/05/16/Lambda表达式和String类的compareTo方法/