【问题标题】:Convert long to int, keep positive/negative/0将long转换为int,保持正/负/0
【发布时间】:2012-04-11 13:15:09
【问题描述】:

我想用Long 实现java.util.Comparator

new Comparator<Long>() {
    public int compare(Long l1, Long l2) {
        // (*)
    }
}

我有一个运营商?:的解决方案:

return l1==l2 ? 0 : (l1>l2 ? 1 : -1);

但我想知道是否有其他方法可以实现它。

(我在尝试return (int)(l1-l2),但它不正确)。

【问题讨论】:

  • 你为什么要改变你的实现?没错。
  • return (int)Math.signum(l1-l2) ?
  • @assylias 然后您将 long 转换为 double,然后再次将 double 转换回 int。此外,该解决方案可能不适用于所有 long (例如,在 2^60 和 2^60-1 上返回 0)
  • @dtech 显然效率不高,但响应“(我正在尝试返回 (int)(l1-l2),但它不正确)。”

标签: java integer long-integer


【解决方案1】:

这很简单 - Long 本身提供了一个实现:

public int compare(Long l1, Long l2) {
    return l1.compareTo(l2);   
}

另一方面,我不知道为什么你有一个自定义比较器...

编辑:如果您实际上比较long 的值并且您使用的是Java 1.7,则可以使用Long.compare(long, long)。否则,请使用您当前的实现。

【讨论】:

  • 谢谢,这是我真正问题的简化演示。但是我刚刚发现,我需要比较的是longs,而不是Longs,所以我还是要用?:
  • @FreeWind Java 从 1.6 开始就有自动装箱功能,所以没关系。 long 和 Long 可以在方法签名中互换使用。或者你可以使用new Long(long value)
  • 你的答案仍然是这个问题的最佳答案:)
【解决方案2】:

不,这是唯一有效的方法。这个话题已经讨论过很多次了。当然,java.lang.Long 已经实现了 compareTo 函数,但它的实现与您完全相同。

【讨论】:

  • 最后我还是用?:,但是因为在这个问题中是Long,所以我不得不选择JonSkeet的答案。谢谢!
猜你喜欢
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多