使用Lambda表达式对多个属性进行排序
问题内容:
这是我的清单:
Name: Ben || Age: 5 || Group: 1
Name: Andy || Age: 6 || Group: 2
Name: Charlie || Age: 6 || Group: 2
Name: Ben || Age: 5 || Group: 1
Name: Andy || Age: 5 || Group: 2
Name: Charlie || Age: 5 || Group: 1
我想按列表排序Group
,如果Group
等于则按Age
,如果Age
等于则按Name
。但是到目前为止,我只能使用Lambda表达式按一个属性排序:
list.sort((Object o1, Object o2) -> o1.getGroup().compareTo(o2.getGroup()));
如果我尝试
o1.getGroup().compareTo(o2.getGroup()) && o1.getAge().compareTo(o2.getAge())
原来是错误的…
问题答案:
将lambda 表达式 更改为lambda {block} ,而不必指定参数类型:
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;
});