Vor kurzem habe ich zum ersten Mal seit einem halben Jahr Java geschrieben. Früher habe ich in meinem Unternehmen ** Java7 (!) ** verwendet, jetzt verwende ich Java8.
Ich benutze "Stream" ziemlich oft und habe es aufgeschrieben, weil ich neulich erfahren habe, dass es nach mehreren Bedingungen sortiert werden kann.
Java Stream API Stream (Java Platform SE 8 )
API, die aggregierte Operationen wie iterative Verarbeitung und parallele Verarbeitung unterstützt.
Durch die Kombination mit einem Lambda-Ausdruck (Pfeilfunktion in JS) kann dieser einfach beschrieben werden, ohne die erweiterte for-Syntax zu verwenden.
Dies ist über die Schnittstelle Comparator möglich.
Sie können nach mehreren Bedingungen sortieren, indem Sie die Sortierbedingungen mit den Methoden "compare ()" und "thenComparing ()" angeben und an "sorted ()" des "Streams" übergeben.
Bitte verzeihen Sie mir die Komplexität des Designs.
Article.java
import java.time.LocalDate;
public class Article {
/**Mitwirkender*/
private String contributor;
/**Datum der Veröffentlichung*/
private LocalDate date;
/**Anzahl der Likes*/
private int goodCount;
/**Konstrukteur*/
public Article(String contributor, LocalDate date, int goodCount) {
this.contributor = contributor;
this.date = date;
this.goodCount = goodCount;
}
/** Getter, Setter */
public String getContributor() {
return this.contributor;
}
public void setContributor(String contributor) {
this.contributor = contributor;
}
public LocalDate getDate() {
return this.date;
}
public void setDate(LocalDate date) {
this.date = date;
}
public int getGoodCount() {
return this.goodCount;
}
public void setGoodCount(int goodCount) {
this.goodCount = goodCount;
}
}
Stream
KlasseStream.java
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
public class Stream {
public static void main(String[] args) {
//Datengenerierung
Article a1 = new Article("Taro", LocalDate.of(2018, 7, 11), 15);
Article a2 = new Article("Taro", LocalDate.of(2015, 11, 1), 53);
Article a3 = new Article("Taro", LocalDate.of(2015, 10, 31), 54);
Article a4 = new Article("Hanako", LocalDate.of(2017, 2, 5), 53);
Article a5 = new Article("Hanako", LocalDate.of(2016, 11, 1), 160);
Article a6 = new Article("Hanako", LocalDate.of(2012, 8, 20), 22);
Article a7 = new Article("Pochi", LocalDate.of(2013, 3, 16), 38);
Article a8 = new Article("Pochi", LocalDate.of(2011, 9, 25), 200);
Article a9 = new Article("Pochi", LocalDate.of(2018, 4, 13), 10);
//Listenerstellung
List<Article> list = Arrays.asList(a1, a2, a3, a4, a5, a6, a7, a8, a9);
list.stream().forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
}
}
Vorerst, wenn Sie eine Liste von "a1" bis "a9" ausgeben
Ausgabeergebnis
Taro 2018-07-11 15
Taro 2015-11-01 53
Taro 2015-10-31 54
Hanako 2017-02-05 53
Hanako 2016-11-01 160
Hanako 2012-08-20 22
Pochi 2013-03-16 38
Pochi 2011-09-25 200
Pochi 2018-04-13 10
Wird sein.
Übergeben Sie "Comparator" als Argument und sortieren Sie in der angegebenen Reihenfolge.
In einem Wörterbuch nach Namen sortieren.
Stream.java
//Erstellt von Comparator
Comparator<Article> comparator = Comparator.comparing(Article::getContributor);
//Nach Posternamen sortieren
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Ausgabeergebnis
Hanako 2017-02-05 53
Hanako 2016-11-01 160
Hanako 2012-08-20 22
Pochi 2013-03-16 38
Pochi 2011-09-25 200
Pochi 2018-04-13 10
Taro 2018-07-11 15
Taro 2015-11-01 53
Taro 2015-10-31 54
Sie können auch nach anderen Elementen sortieren.
thenComparing
thenComparing (Java Platform SE 8)
Eine Methode, mit der Sie Vergleichsbedingungen verketten können. Verwenden Sie wie folgt.
comparator
Comparator.comparing(...).thenComparing(...).thenComparing(...);
Wenn die vorherigen Bedingungen gleich sind ("gleich"), führen Sie einen weiteren Vergleich durch.
Gibt einen Wörterbuchsequenzkomparator mit dem anderen Komparator zurück. Wenn dieser Vergleicher die beiden Elemente als gleich betrachtet (dh (a, b) == 0), wird zur Bestimmung der Reihenfolge andere verwendet.
Stream.java
//Erstellt von Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getDate);
//Sortierverarbeitung
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Ausgabeergebnis
Hanako 2012-08-20 22
Hanako 2016-11-01 160
Hanako 2017-02-05 53
Pochi 2011-09-25 200
Pochi 2013-03-16 38
Pochi 2018-04-13 10
Taro 2015-10-31 54
Taro 2015-11-01 53
Taro 2018-07-11 15
Stream.java
//Erstellt von Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getGoodCount);
//Sortierverarbeitung
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Ausgabeergebnis
Hanako 2012-08-20 22
Hanako 2017-02-05 53
Hanako 2016-11-01 160
Pochi 2018-04-13 10
Pochi 2013-03-16 38
Pochi 2011-09-25 200
Taro 2018-07-11 15
Taro 2015-11-01 53
Taro 2015-10-31 54
Wenn Sie in aufsteigender Reihenfolge möchten, fügen Sie "reverse ()" hinzu
Stream.java
//Erstellt von Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getGoodCount).reversed();
//Sortierverarbeitung
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Ausgabeergebnis
Taro 2015-10-31 54
Taro 2015-11-01 53
Taro 2018-07-11 15
Pochi 2011-09-25 200
Pochi 2013-03-16 38
Pochi 2018-04-13 10
Hanako 2016-11-01 160
Hanako 2017-02-05 53
Hanako 2012-08-20 22
Stream
Wahnsinnig praktisch (obwohl jetzt)Stream (Java Platform SE 8 ) Comparator (Java Platform SE 8 )
Recommended Posts