使用Lambdas的比较器

Sri*_*Sri 0 java lambda comparator java-8

我有一个比较器,它检查是否有任何字符串为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());
    }
   });
 }
Run Code Online (Sandbox Code Playgroud)

我知道如何使用lambdas返回一个简单的比较器.我对如何实现上面的代码很困惑.

Jef*_*rey 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());
};
Run Code Online (Sandbox Code Playgroud)

单线等效(使用Comparator::comparingComparator::nullsFirst)是

Comparator<Student> cmp = Comparator.comparing(Student::getName,
      Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER));
Run Code Online (Sandbox Code Playgroud)