有没有办法返回不会做任何事情的比较器?

2022-09-04 20:04:31

我有两个类扩展一个父类,并且有一个按某个参数对数据进行排序的方法。因此,对于这两个类中的一个,我需要应用一些排序,但对于另外两个类,我不做任何事情。有这种可能性吗?

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
  }

}

答案 1

Stream.sort如果流是有序的,则进行稳定的排序。换句话说,如果两个元素相等,那么它们将保持其初始顺序。

因此,由于您的流是由 a 组成的,因此您可以简单地使所有元素相等:List

protected Comparator<Product> getProductComparator() {
    return (a1, a2) -> 0;
}

虽然看起来不是很酷,但它应该完成这项工作。


答案 2

如果你在类路径上有番石榴,你可以使用:

Ordering.allEqual();  

在内部做同样的事情,返回零...

@Override
public int compare(@Nullable Object left, @Nullable Object right) {
  return 0;
}

推荐