我有人员列表,如果输入列表是 3,0,2,7,0,8
我希望输出是 2,3,7,8,0,0
使用以下代码,我只能对非零数字进行排序以获得 2,3,7,8
作为输出。
sortedList = personList.stream()
.filter(Person -> Person.getAge()>0)
.sorted(Comparator.comparingInt(Person::getAge))
.collect(Collectors.toList());
zeroList=personList.stream()
.filter(Person -> Person.getAge()==0)
.collect(Collectors.toList());
sortedList.addAll(zeroList);
以上两条语句能否合并为一条语句?
最佳答案
您可以通过编写适当的比较器来确保零到最后:
sortedList = personList.stream()
.sorted((p1, p2) -> {
int a = p1.getAge();
int b = p2.getAge();
if (a == 0 && b == 0) return 0;
if (a == 0) return 1;
if (b == 0) return -1;
return Integer.compare(a, b);
})
.collect(Collectors.toList());
或者稍微紧凑一点:
sortedList = personList.stream()
.sorted((p1, p2) -> {
int a = p1.getAge();
int b = p2.getAge();
return a == 0 || b == 0 ? Integer.compare(b, a) : Integer.compare(a, b);
})
.collect(Collectors.toList());