【问题标题】:Using lambda comparator with long return type使用长返回类型的 lambda 比较器
【发布时间】:2021-07-08 20:50:21
【问题描述】:

类似

arrayList.sort((long a, long b)->a - b);

返回

从 long 到 int 的可能有损转换

是否有解决方法来避免 long 到 int 的转换

【问题讨论】:

  • 你的 ArrayList 中有什么类型的数字?
  • 不要养成使用a - b 写入比较器结果的习惯,以符合比较器的返回值。它最终会让你陷入困境。花点时间写a > b ? 1 : a < b ? -1 : 0。或者,如果可能,使用Long.compare 或Integer.compare

标签: java lambda comparator


【解决方案1】:

当然。请改用Long.compare(a, b),或使用自然顺序(sort(Comparator.naturalOrder()))或sort(Long::compare)。

【讨论】:

    【解决方案2】:

    您的比较器无效,因为它返回 long 而预期的返回类型是 int(排序函数的预期类型是 int)。

    一个解决方案是给出一个返回整数的排序条件(在这里你可以控制排序,升序或降序):

    arrayList.sort((x, y) -> (x < y) ? -1 : ((x == y) ? 0 : 1));
    

    另一种解决方案(使用与上一个解决方案相同的逻辑):

    arrayList.sort(Long::compareTo)
    

    您也可以使用 java.utils 中的 Comparator

    升序:

     arrayList.sort(Comparator.naturalOrder()) 
    

    降序排序:

    arrayList.sort(Comparator.reverseOrder()) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-06
      • 1970-01-01
      • 2021-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多