有没有办法 return 比较器不会做任何事情?
Is there a way to return comparator which wont do anything?
我有两个 classes 扩展了一个父 class 并且有一种方法可以按某些参数对数据进行排序。因此,对于这两个 class 之一,我需要应用一些排序,但对于另外两个,我什么都不做。有这种可能吗?
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
}
}
如果流已排序,Stream.sort
会进行 稳定 排序。换句话说,如果两个元素相等,那么它们将保持初始顺序。
因此,由于您的流是由 List
构成的,您可以简单地使所有元素相等:
protected Comparator<Product> getProductComparator() {
return (a1, a2) -> 0;
}
虽然看起来不是很酷,但应该可以。
如果类路径中有 guava,可以使用:
Ordering.allEqual();
在内部做同样的事情返回零...
@Override
public int compare(@Nullable Object left, @Nullable Object right) {
return 0;
}
我有两个 classes 扩展了一个父 class 并且有一种方法可以按某些参数对数据进行排序。因此,对于这两个 class 之一,我需要应用一些排序,但对于另外两个,我什么都不做。有这种可能吗?
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
}
}
Stream.sort
会进行 稳定 排序。换句话说,如果两个元素相等,那么它们将保持初始顺序。
因此,由于您的流是由 List
构成的,您可以简单地使所有元素相等:
protected Comparator<Product> getProductComparator() {
return (a1, a2) -> 0;
}
虽然看起来不是很酷,但应该可以。
如果类路径中有 guava,可以使用:
Ordering.allEqual();
在内部做同样的事情返回零...
@Override
public int compare(@Nullable Object left, @Nullable Object right) {
return 0;
}