2016-05-03 8 views
0

Ich habe einen Komparator, der überprüft, ob einer der Zeichenfolge null ist und -1 zurückgibt. Wenn sie nicht null sind, führt sie den Vergleich durch. Ich möchte dies über Lambda-Funktionen implementiert haben. HierComparator mit Lambdas

ist der Code:

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()); 
    } 
    }); 
} 

Ich weiß, wie für einen einfachen Komparator zurückzukehren lambdas verwenden. Ich bin verwirrt, wie man den obigen Code implementiert.

+5

Sie Ihre IDE verwenden könnte, den Code zu konvertieren einen Lambda zu verwenden. Sollte nicht 'null == null' sein? –

Antwort

10

Es gibt mehrere Möglichkeiten, dies zu tun. Die wörtliche Übersetzung des Codes zu einem Lambda ist

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

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

Der Einzeiler Äquivalent (mit Comparator::comparing und Comparator::nullsFirst) ist

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