Tri personnalisé de la liste des objets à l'aide de Java Stream
Feb 11 2023
Parfois, vous devez trier la liste des objets de sorte que peu d'éléments soient triés par ordre croissant et que peu d'éléments soient triés par ordre décroissant. Disons que vous avez ci-dessous la classe Java POJO : nous pouvons écrire des comparateurs séparés pour chaque attribut à utiliser dans le tri.
Parfois, vous devez trier la liste des objets de sorte que peu d'éléments soient triés par ordre croissant et que peu d'éléments soient triés par ordre décroissant .
Disons que vous avez ci-dessous la classe Java POJO :
package com.custom.sorting.model;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Builder
@Data
public class Seller {
String sellerName;
Double distanceFromMyLocation;
String sellerState;
Double sellerRating;
}
- la liste sera triée par ordre croissant de distanceFromMyLocation
- la liste sera triée par ordre décroissant de la note du vendeur
- la liste sera triée par ordre croissant de sellerName
- la liste sera triée par ordre croissant de sellerState
Nous pouvons écrire des comparateurs séparés pour chaque attribut à utiliser dans le tri.
Code Java :
package com.custom.sorting.service;
import com.custom.sorting.model.Seller;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
public class CustomSorting {
public static void main(String[] args) {
List<Seller> sellerList = getSampleListOfSellers();
//seller name comparator
Comparator<Seller> sellerNameComparator = Comparator.comparing(Seller::getSellerName);
//seller location distance comparator
Comparator<Seller> sellerLocationDistanceComparator = Comparator.comparing(Seller::getDistanceFromMyLocation);
//seller state comparator
Comparator<Seller> sellerStateComparator = Comparator.comparing(Seller::getSellerState);
//seller rating comparator
Comparator<Seller> sellerRatingComparator = Comparator.comparing(Seller::getSellerRating);
Comparator<Seller> finalComparator = sellerLocationDistanceComparator
.thenComparing(sellerRatingComparator.reversed())
.thenComparing(sellerNameComparator)
.thenComparing(sellerStateComparator);
List<Seller> sortedSellerList = sellerList.stream()
.sorted(finalComparator)
.collect(Collectors.toList());
sortedSellerList.forEach(seller -> System.out.println(seller.toString()));
}
public static List<Seller> getSampleListOfSellers() {
return Arrays.asList(
getSeller("Alice", 60.0, "Goa", 3.8),
getSeller("Bob", 12.0, "Delhi", 4.2),
getSeller("Alex", 12.0, "Kerala", 4.5),
getSeller("Roy", 56.7, "Maharashtra", 4.4),
getSeller("Mark", 125.0, "Gujarat", 4.0),
getSeller("Eric", 125.0, "Gujarat", 4.0)
);
}
public static Seller getSeller(String sellerName,
Double distanceFromMyLocation,
String sellerState,
Double sellerRating) {
return Seller.builder().sellerName(sellerName)
.distanceFromMyLocation(distanceFromMyLocation)
.sellerState(sellerState)
.sellerRating(sellerRating)
.build();
}
}
Seller(sellerName=Alex, distanceFromMyLocation=12.0, sellerState=Kerala, sellerRating=4.5)
Seller(sellerName=Bob, distanceFromMyLocation=12.0, sellerState=Delhi, sellerRating=4.2)
Seller(sellerName=Roy, distanceFromMyLocation=56.7, sellerState=Maharashtra, sellerRating=4.4)
Seller(sellerName=Alice, distanceFromMyLocation=60.0, sellerState=Goa, sellerRating=3.8)
Seller(sellerName=Eric, distanceFromMyLocation=125.0, sellerState=Gujarat, sellerRating=4.0)
Seller(sellerName=Mark, distanceFromMyLocation=125.0, sellerState=Gujarat, sellerRating=4.0)
![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































