【问题标题】:Different comparing with CompareTo与 CompareTo 不同的比较
【发布时间】:2015-05-17 23:40:58
【问题描述】:

我每次都尝试根据情况进行不同的比较。 例如: 我有一个名为 Line 的类,在类中有字符串名称、int id 和 int 扩展名 我希望能够通过名称或 id 或扩展名来比较 2 个不同的 Line 对象。

【问题讨论】:

  • 这实际上是一个很好的问题,即使他们没有提供他们尝试过的代码(因为如果你不知道的话,没有什么可以尝试的)。

标签: java comparison comparator compareto


【解决方案1】:

如果您有两种不同的比较方案,您可能需要两个不同的Comparators(或可以配置的一个,例如,通过构造函数参数来进行比较)

public class LineNameComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getName().compareTo(b.getName());
    }
}

public class LineIdComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getIf().compareTo(b.getId());
    }
}

public class LineExtensionComparator implements Comparator<Line> {
    @Override
    public int compare (Line a, Line b) {
        return a.getExtension().compareTo(b.getExtension());
    }
}

...然后根据自己的需要使用:

List<Line> list = ...

// Sort by name:
Collections.sort(list, new LineNameComparator());


// Sort by ID:
Collections.sort(list, new LineIdComparator());


// Sort by extension:
Collections.sort(list, new LineExtensionComparator());

【讨论】:

  • 这很好,但我需要使用 compareTo,它是必需的。
  • 我们是否可以像上面那样构建辅助比较方法,然后在 compareTo 中随机生成一个数字以用作选择哪个比较器?目前尚不清楚程序员是否需要能够选择使用哪个比较(尽管我意识到这听起来倒退了)。
  • 不,它不应该是随机的。用户会问如何比较。我想我已经弄清楚了,我仍在测试它。
猜你喜欢
  • 2016-10-22
  • 2020-03-26
  • 2021-09-26
  • 2019-06-03
  • 2012-07-12
  • 2011-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多