Récemment, j'ai écrit Java pour la première fois en six mois. J'utilisais ** Java7 (!) ** dans mon entreprise, mais maintenant j'utilise Java8.
J'utilise stream
assez souvent, et je l'ai écrit parce que j'ai appris l'autre jour qu'il peut être trié par plusieurs conditions.
Java Stream API Stream (Java Platform SE 8 )
API qui prend en charge les opérations agrégées telles que le traitement itératif et le traitement parallèle.
En combinant avec une expression lambda (fonction de flèche dans JS), il peut être décrit simplement sans utiliser la syntaxe étendue pour.
Cela est possible en utilisant l'interface Comparator.
Le tri selon plusieurs conditions est possible en spécifiant les conditions de tri avec les méthodes «compare ()» et «thenComparing ()» et en les passant au «sorted ()» du «flux».
Veuillez me pardonner pour la complexité de la conception.
Article.java
import java.time.LocalDate;
public class Article {
/**Donateur*/
private String contributor;
/**Date de publication*/
private LocalDate date;
/**Nombre de likes*/
private int goodCount;
/**constructeur*/
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
Stream.java
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;
public class Stream {
public static void main(String[] args) {
//Génération de données
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);
//Création de liste
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()));
}
}
Pour le moment, si vous affichez une liste de «a1» à «a9»
Résultat de sortie
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
Sera.
Passez Comparator
comme argument et triez dans l'ordre spécifié.
Trier par nom dans un dictionnaire.
Stream.java
//Créé par Comparator
Comparator<Article> comparator = Comparator.comparing(Article::getContributor);
//Trier par nom d'affiche
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Résultat de sortie
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
Vous pouvez également trier par d'autres éléments.
thenComparing
thenComparing (Java Platform SE 8)
Une méthode qui vous permet d'enchaîner les conditions de comparaison. Utilisez comme suit.
comparator
Comparator.comparing(...).thenComparing(...).thenComparing(...);
Si les conditions précédentes sont identiques («égales»), effectuez une autre comparaison.
Renvoie un comparateur d'ordre lexical avec l'autre comparateur. Si ce comparateur considère que les deux éléments sont égaux (c'est-à-dire compare (a, b) == 0), alors autre est utilisé pour déterminer l'ordre.
Stream.java
//Créé par Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getDate);
//Traitement du tri
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Résultat de sortie
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
//Créé par Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getGoodCount);
//Traitement du tri
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Résultat de sortie
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
Si vous voulez dans l'ordre croissant, ajoutez reverse ()
Stream.java
//Créé par Comparator
Comparator<Article> comparator =
Comparator.comparing(Article::getContributor).thenComparing(Article::getGoodCount).reversed();
//Traitement du tri
list.stream().sorted(comparator)
.forEach(a ->
System.out.println(a.getContributor() + " " + a.getDate() + " " + a.getGoodCount()));
Résultat de sortie
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
Incroyablement pratique (bien que maintenant)Comparator
comparateur
lui-même et de le trier plusieurs fois.Stream (Java Platform SE 8 ) Comparator (Java Platform SE 8 )
Recommended Posts