假设我们有一个 List sellers,其中 Seller 是一个供应商类,包含属性 score 和 totalQuote,分别表示供应商分数和报价总额。我们可以使用 Comparator 来实现排序。

首先按照供应商分数进行排序,可以使用下面的代码:

Collections.sort(sellers, new Comparator<Seller>() {
    @Override
    public int compare(Seller s1, Seller s2) {
        if (s1.getScore() == null && s2.getScore() == null) {
            return 0;
        } else if (s1.getScore() == null) {
            return 1;
        } else if (s2.getScore() == null) {
            return -1;
        }
        return s2.getScore().compareTo(s1.getScore());
    }
});

这里使用了匿名内部类实现了 Comparator 接口,对于没有分数的供应商,我们认为它们是相等的,对于有分数的供应商,将它们按照分数倒序排序。

然后,如果供应商分数相同或为空,我们再按照报价总额进行升序排序,可以继续使用 Comparator 实现:

Collections.sort(sellers, new Comparator<Seller>() {
    @Override
    public int compare(Seller s1, Seller s2) {
        if (s1.getScore() == null && s2.getScore() == null) {
            return s1.getTotalQuote().compareTo(s2.getTotalQuote());
        } else if (s1.getScore() == null) {
            return 1;
        } else if (s2.getScore() == null) {
            return -1;
        }
        int scoreCompare = s2.getScore().compareTo(s1.getScore());
        if (scoreCompare != 0) {
            return scoreCompare;
        }
        return s1.getTotalQuote().compareTo(s2.getTotalQuote());
    }
});

这里我们先判断供应商分数是否相同或为空,如果是,按照报价总额进行升序排序,否则按照分数倒序排序。注意,如果分数相同,我们还需要按照报价总额排序,因此最后返回 s1.getTotalQuote().compareTo(s2.getTotalQuote())。

使用这两个 Comparator,我们可以轻松地实现按照供应商分数倒序、报价总额升序排序的功能。


原文地址: http://www.cveoy.top/t/topic/nsYx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录