java - 如何处理比较器中的空比较方法参数?

标签 java libgdx comparator

我已经创建了一个 Comparator<Entity> 的实现,但是当我使用这个比较器对 Array<Entity> 进行排序时.我会收到 java.lang.NullPointerException ,因为当我将实体映射到已删除的静态集合时。现在我的问题是我不知道要返回什么来跳过比较方法。

public class CustomComparator implements Comparator<Entity> {

   public int compare(Entity e1, Entity e2) {
       if( e1== null || e2 == null) {
           return // don't know what to return to skip this method;
       }

       Vector2 e1Pos = Mapper.transform.get(e1).position;
       Vector2 e2Pos = Mapper.transform.get(e2).position;

   }

}

最佳答案

您不能“跳过”比较。您希望排序代码做什么?您必须为其提供结果。

两个选项很常见:

  • 抛出一个NullPointerException 来表明您只是不支持比较null 值。这显然是 compare 中的一个选项。文档
  • 确定 null 出现在其他所有内容之前,但等于它自己

后一种实现类似于:

public int compare(Entity e1, Entity e2) {
    if (e1 == e2) {
        return 0;
    }
    if (e1 == null) {
        return -1;
    }
    if (e2 == null) {
        return 1;
    }
    Vector2 e1Pos = Mapper.transform.get(e1).position;
    Vector2 e2Pos = Mapper.transform.get(e2).position;
    return ...;
}

关于java - 如何处理比较器中的空比较方法参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39804174/

相关文章:

java - com.sun.mail.smtp.SMTPSendFailedException : 530-5. 5.1 需要身份验证(Java 邮件)

android - 如何使用Libgdx绘制网格并处理每个方 block 的点击事件

java - 在 Eclipse 上设置 LibGDX 时出错

java - 如何在 Guava 订购中找到哪个比较器 'broke the tie'

java - 调用Comparator比较方法中的方法

java - 没有catch的嵌套try if有什么用吗?

java - 如何查看 jOOQ 执行的 SQL 语句?

c++ - C++ Map 中结构键的比较运算符

java - Spring ResponseBodyEmitter 和 SseEmitter 卡住了初始化和累积 earlySendAttempts

java - LibGDX Sprite 不旋转 "Rotate"和 "setRotation"