相关疑难解决方法(0)

具有空值检查的Java 8 lambda比较器

我已经使用lambda表达式对集合实现了排序以进行比较.我必须检查空值,所以我想出了比较器的这个解决方案

(a,b)->(
    (a.getStartDate() == null) 
        ? ( (b.getStartDate() == null) ? 0 : -1)
        : ( (b.getStartDate() == null)?1:a.getStartDate().compareTo(b.getStartDate()) )
);
Run Code Online (Sandbox Code Playgroud)

我已经检查了一些问题,比如这个,但它们都是指lambda前代码.

java lambda表达式让我有机会避免两个'if'语句吗?我能以更干净的方式执行任务吗?

lambda java-8

22
推荐指数
1
解决办法
2万
查看次数

Java 8 Comparator nullsFirst naturalOrder困惑

这可能是一个简单的问题,但我想清楚地理解它......

我有这样的代码:

public final class Persona
{
   private final int id;
   private final String name
   public Persona(final int id,final String name)
   {
       this.id = id;
       this.name = name;
   }
   public int getId(){return id;}    
   public String getName(){return name;}     
   @Override
   public String toString(){return "Persona{" + "id=" + id + ", name=" + name+'}';}    
 }
Run Code Online (Sandbox Code Playgroud)

我正在测试这段代码:

import static java.util.Comparator.*;
private void nullsFirstTesting()
{               
    final Comparator<Persona>comparator = comparing(Persona::getName,nullsFirst(naturalOrder()));
    final List<Persona>persons = Arrays.asList(new Persona(1,"Cristian"),new Persona(2,"Guadalupe"),new Persona(3,"Cristina"),new Persona(4,"Chinga"),new Persona(5,null));
    persons
            .stream()
            .sorted(comparator)
            .forEach(System.out::println);                           
}
Run Code Online (Sandbox Code Playgroud)

这显示以下结果:

Persona{id=5, …
Run Code Online (Sandbox Code Playgroud)

java sorting string comparator java-8

14
推荐指数
3
解决办法
3万
查看次数

标签 统计

java-8 ×2

comparator ×1

java ×1

lambda ×1

sorting ×1

string ×1