Есть ли способ вернуть компаратор, который ничего не делает?
У меня есть два класса, расширяющие один родительский класс, и есть метод, который сортирует данные по некоторому параметру. Поэтому для одного из этих двух классов мне нужно применить некоторую сортировку, но для двух других ничего не делать. Есть ли такая возможность?
public class MedicalCompositeRatesData{
@Override
public List<RateTableData> buildData(RateTableInputBean inputBean)
{
SGQuotingData sgQuotingData = inputBean.getQuotingData();
List<ProductData> products = extractorFactory
.getProductExtractor(inputBean.getPlanType(), inputBean.getRatingType())
.extract(sgQuotingData);
List<Row> rates = products.stream()
.map(it -> buildRow(it, sgQuotingData))
.sorted(getProductComparator())
.filter(Objects::nonNull)
.collect(Collectors.toList());
return buildRateTables(rates);
}
protected Comparator<Product> getProductComparator(){
//should leave default sorting
}
}
public class AlternateCompositeRatesBuilder extends MedicalCompositeRatesData
{
protected Comparator<Product> getProductComparator(){
//will sort by rate
}
}
2 ответа:
Stream.sort
делает стабильную сортировку, если поток упорядочен. Другими словами, если два элемента равны, то они сохранят свой первоначальный порядок.Таким образом, поскольку ваш поток состоит из
List
, Вы можете просто сделать все элементы равными:protected Comparator<Product> getProductComparator() { return (a1, a2) -> 0; }
Это не очень круто выглядит, но это должно делать свою работу.