【问题标题】:Comparator using Lambdas使用 Lambda 的比较器
【发布时间】:2016-05-03 17:17:36
【问题描述】:

我有一个比较器,它检查任何字符串是否为空并返回 -1。如果它们不为空,则进行比较。我想使用 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 返回一个简单的比较器。我对如何实现上述代码感到困惑。

【问题讨论】:

  • 您可以使用 IDE 将代码转换为使用 lambda。不应该null == null吗?

标签: java lambda java-8 comparator


【解决方案1】:

有几种方法可以做到这一点。您的代码到 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::comparingComparator::nullsFirst)是

Comparator<Student> cmp = Comparator.comparing(Student::getName,
      Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-28
    • 2018-04-28
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多