2016-05-03 5 views
0

私は、文字列のどれかが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()); 
    } 
    }); 
} 

私はラムダを使用して、簡単なコンパレータのために返す方法を知っています。私は上記のコードをどのように実装するのか混乱しています。

+5

があります。 'null == null'ではありませんか? –

答えて

10

これを行うにはいくつかの方法があります。ラムダにあなたのコードの直訳は(Comparator::comparingComparator::nullsFirstを使用して)

Comparator<Student> cmp = (s1, s2) -> { 
    if (s1.getName() == null) { 
    return -1; 
    } 
    if (s2.getName() == null) { 
    return 1; 
    } 

    return s1.getName().compareToIgnoreCase(s2.getName()); 
}; 

ワンライナー同等のあなたは、ラムダを使用するようにコードを変換するためにあなたのIDEを使用することができ

Comparator<Student> cmp = Comparator.comparing(Student::getName, 
     Comparator.nullsFirst(String.CASE_INSENSITIVE_ORDER)); 
関連する問題