我已经创建了一个 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/