我已经使用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'语句吗?我能以更干净的方式执行任务吗?
这可能是一个简单的问题,但我想清楚地理解它......
我有这样的代码:
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)