使用 (a,b) -> a-b lambda 函数 java
use of (a,b) -> a-b lambda function java
你好
我总是很困惑为什么我们使用 (a,b) -> a-b 进行排序。
例子-
Collections.sort(list, (a, b) -> { return (a[1] - b[1]); });
PriorityQueue MaxHeap = new PriorityQueue<>((a,b) -> a-b);
我真的很困惑,我试图通过调试代码来理解这个语句的流程。
ArrayList<int[]> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(new int[] { start[i], end[i] });
}
Collections.sort(list, (a, b) -> {
return (a[1] - b[1]);
});
int count = 1;
int[] x = list.get(0);
for (int i = 1; i < list.size(); i++) {
int[] res = list.get(i);
if (x[1] < res[0]) {
count += 1;
x = res;
}
}
return count;
}
如果有人有更好的理解方式请帮助我。
lambda (a,b) -> a-b
的 目标 是产生一个满足 Comparator
契约的数字:
- 如果
a
小于 b
- return 为负结果
- 如果
a
等于 b
- return 零
- 如果
a
大于 b
- return 为阳性结果。
由 Comparator
编辑的值 return 被 sort
用于比较集合中的元素对(数字)以决定哪个更大。
问题 是 a - b
对于 Java 整数类型 1 不能正常工作。在某些情况下,a - b
会溢出,您会得到符号错误的结果。例如,如果 a
是 Integer.MIN_VALUE
,而 b
是一个正整数,那么 a - b
应该是负数时会是正数。
(这是一个相当常见的错误,即使是相对有经验的程序员也会犯...但希望只有一次。)
相比之下,Integer.compare(int, int)
方法为所有可能的参数给出了正确的答案。更好(即更正确)的解决方案是:
Collections.sort(list, (a, b) -> Integer.compare(a[1], b[1]));
PriorityQueue<Integer> MaxHeap = new PriorityQueue<>(Integer::compare);
1 - 事实上,对于溢出不会触发某种异常的任何类型的整数类型。对于浮点类型,有不同的问题。
你好 我总是很困惑为什么我们使用 (a,b) -> a-b 进行排序。
例子-
Collections.sort(list, (a, b) -> { return (a[1] - b[1]); });
PriorityQueue MaxHeap = new PriorityQueue<>((a,b) -> a-b);
我真的很困惑,我试图通过调试代码来理解这个语句的流程。
ArrayList<int[]> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(new int[] { start[i], end[i] });
}
Collections.sort(list, (a, b) -> {
return (a[1] - b[1]);
});
int count = 1;
int[] x = list.get(0);
for (int i = 1; i < list.size(); i++) {
int[] res = list.get(i);
if (x[1] < res[0]) {
count += 1;
x = res;
}
}
return count;
}
如果有人有更好的理解方式请帮助我。
lambda (a,b) -> a-b
的 目标 是产生一个满足 Comparator
契约的数字:
- 如果
a
小于b
- return 为负结果 - 如果
a
等于b
- return 零 - 如果
a
大于b
- return 为阳性结果。
由 Comparator
编辑的值 return 被 sort
用于比较集合中的元素对(数字)以决定哪个更大。
问题 是 a - b
对于 Java 整数类型 1 不能正常工作。在某些情况下,a - b
会溢出,您会得到符号错误的结果。例如,如果 a
是 Integer.MIN_VALUE
,而 b
是一个正整数,那么 a - b
应该是负数时会是正数。
(这是一个相当常见的错误,即使是相对有经验的程序员也会犯...但希望只有一次。)
相比之下,Integer.compare(int, int)
方法为所有可能的参数给出了正确的答案。更好(即更正确)的解决方案是:
Collections.sort(list, (a, b) -> Integer.compare(a[1], b[1]));
PriorityQueue<Integer> MaxHeap = new PriorityQueue<>(Integer::compare);
1 - 事实上,对于溢出不会触发某种异常的任何类型的整数类型。对于浮点类型,有不同的问题。