Penyortiran kustom daftar objek menggunakan Java Stream
Feb 11 2023
Terkadang Anda perlu mengurutkan daftar objek sedemikian rupa sehingga beberapa elemen diurutkan dalam urutan menaik dan beberapa elemen diurutkan dalam urutan menurun. Katakanlah Anda memiliki kelas Java POJO di bawah ini: Kita dapat menulis pembanding terpisah untuk setiap atribut yang akan digunakan dalam penyortiran.
Terkadang Anda perlu mengurutkan daftar objek sedemikian rupa sehingga beberapa elemen diurutkan dalam urutan menaik dan beberapa elemen diurutkan dalam urutan menurun .
Katakanlah Anda memiliki kelas Java POJO di bawah ini:
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;
}
- list akan diurutkan dalam urutan menaik dari distanceFromMyLocation
- daftar akan diurutkan dalam urutan menurun dari sellerRating
- list akan diurutkan dalam urutan menaik dari sellerName
- daftar akan diurutkan dalam urutan menaik dari sellerState
Kita dapat menulis pembanding terpisah untuk setiap atribut yang akan digunakan dalam penyortiran.
kode Jawa :
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)

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































