2016-11-25 4 views
0
String obtained = transactions.stream() 
    .map(Transaction::getTrader) 
    .map(Trader::getName) 
    .sorted(String::compareTo) 
    .collect(Collectors.joining(",")); 

Was soll ich tun, wenn ich eine bestimmtes Comparator<String> ohne das Schreiben die natürliche alphabetische Reihenfolge im zurückgegebenen String umkehren will, so dass das verkettete Zeichenfolge Ergebnis mit dem Namen beginnt ‚z ..‘, ‚y ..‘, 'x ..' und so weiter?Wie wird die Komparatorreihenfolge mithilfe der Stream-API umgekehrt?

Antwort

2

in Java, so etwas wie dies kann den Trick:

String obtained = transactions.stream() 
        .map(Transaction::getTrader).map(Trader::getName) 
        .sorted(Comparator.reverseOrder()) 
        .collect(Collectors.joining(",")); 

Beachten Sie, dass es funktioniert, weil String Vergleichbar Interface implementiert.

+0

Das ist, was ich erwartet hatte! Thx, TDRS –

+0

Ich glaube, du meintest 'Comparator.reverseOrder()' anstelle von 'Collection' – 4castle

2

Zum Sortieren der Sammlung in umgekehrter Reihenfolge ist nur eine Operation erforderlich.

Zeichenfolge implementiert Vergleichbare Schnittstelle. Die javadoc für java.lang.Comparable # compareTo() sagt, dass es zurückgibt:

eine negative ganze Zahl, Null oder eine positive ganze Zahl, wie dieses Objekt kleiner als, gleich oder größer als der gebenes Objekt

Um Reihenfolge der Sammlung umkehren können Sie:

  1. [empfohlen] u se Comparator.reverseOrder (javadoc), die

    einen Komparator zurück, der die umgekehrte Reihenfolge der angegebenen Komparator auferlegt. (...)

    List<String> strings = Arrays.asList("a","b","d", "c", "e"); 
    reversedOrderedStrings = strings.stream() 
              .sorted(Comparator.reverseOrder()) 
              .collect(Collectors.joining(",")); 
    
  2. Invert Reihenfolge der im Vergleich Parameter

    reversedOrderedStrings = strings.stream() 
              .sorted((s1, s2) -> s2.compareTo(s1)) 
              .collect(Collectors.joining(",")); 
    
  3. [nicht empfohlen] das Zeichen der Methode compareTo() ändern. Dies ist nicht empfehlenswert, da es numerischen Überlauf für Integer.MIN_VALUE

    reversedOrderedStrings = strings.stream() 
              .sorted((s1, s2) -> -s1.compareTo(s2)) 
              .collect(Collectors.joining(",")); 
    

Ausgang verursachen können für alle gleich ist:

System.out.println(reversedOrderedStrings); 
e,d,c,b,a 
+1

Sie haben Recht, aber die Frage sagt, nicht Ihre eigenen Komparator zu schreiben. Ich bestätige, dass Ihre Methode schneller ist und verwendet werden muss. –

+0

Ja, ich weiß, dass ich das tun kann, ich suchte nach der Collection.reverseOrder() -Methode. –

+0

Ich hätte "sortierte (Comparator.reverseOrder())" in meiner Antwort verwendet, wie in [Einen Vergleicher in Java 8 umkehren] (http://stackoverflow.com/questions/32995559/reverse-a-comparator-in- Java-8). – gr7

Verwandte Themen