我有一个比较器,它检查是否有任何字符串为null并返回-1。如果它们不为null,则进行比较。我希望使用lambda函数实现它。
以下是代码:
private SortedSet<Student> studentSet() {
return new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
if(s1.getName() == null) {
return -1;
}
if(s2.getName() == null) {
return 1;
}
return s1.getName().compareToIgnoreCase(s2.getName());
}
});
}
我知道如何使用lambdas返回一个简单的比较器。我对如何实现上述代码感到困惑。
答案 0 :(得分:10)
有几种方法可以做到这一点。您的代码到lambda的字面翻译是
Comparator<Student> cmp = (s1, s2) -> {
if (s1.getName() == null) {
return -1;
}
if (s2.getName() == null) {
return 1;
}
return s1.getName().compareToIgnoreCase(s2.getName());
};
单行等价物(使用Comparator::comparing
和Comparator::nullsFirst
)是
Comparator<Student> cmp = Comparator.comparing(Student::getName,
Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER));