[英]How to sort int[] with multi-line lambda expression in Java
这个问题有一个关于如何使用多行 lambda 表达式对列表进行排序的答案:
list.sort((o1, o2) -> {
int cmp = o1.getGroup().compareTo(o2.getGroup());
if (cmp == 0)
cmp = Integer.compare(o1.getAge(), o2.getAge());
if (cmp == 0)
cmp = o1.getName().compareTo(o2.getName());
return cmp;
});
不幸的是,这似乎不适用于原始数组int[] arr
:
Arrays.sort(arr, (int1, int2) -> {
// some lambda, various if-else statements for example
});
如何在 Arrays.sort() 中使用多行 lambda 表达式对原始数组进行排序?
只要它使用 lambda 表达式(没有比较器),我对任何其他方法都很好(不必使用Arrays.
)。
如果您打算只使用lambdas
,那么这将适用于lists
和arrays
。 这假定您的group
和age
字段是整数。
Comparator<Item> comp = (o1, o2) -> {
int cmp = Integer.compare(o1.getGroup(), o2.getGroup());
cmp = cmp == 0 ? Integer.compare(o1.getAge(), o2.getAge()) : cmp;
cmp = cmp == 0 ? o1.getName().compareTo(o2.getName()) : cmp;
return cmp;
};
list.sort(comp);
Arrays.sort(items, comp);
但我会使用List
并按如下方式执行:
list.sort(Comparator.comparing(Item::getGroup)
.thenComparing(Item::getAge)
.thenComparing(Item::getName));
甚至您的lambda
表达式也是一个comparator
。 无论您如何构造它,都无法在没有某种Comparator
的情况下进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.