Collections.sort的Comparator <>中面临的问题

萨瑟什S

嗨,下面是我的示例Java代码。我想在我的应用程序中使用相同的逻辑。

/*Bean Class*/
public class TestingBean {
private Integer intOne;
private Integer intTwo;
//getters and setters
}

/**Main Class*/
public class FilterTesting {
public static void main(String[] args) {
    validateFilter();
}

public static void validateFilter() {
    List<TestingBean> testBeanList=new ArrayList<TestingBean>();

    TestingBean testingBean=new TestingBean();
    testingBean.setIntOne(1);
    testingBean.setIntTwo(1003);
    testBeanList.add(testingBean);

    TestingBean testingBean2=new TestingBean();
    testingBean2.setIntOne(2);
    testingBean2.setIntTwo(2002);
    testBeanList.add(testingBean2);

    TestingBean testingBean3=new TestingBean();
    testingBean3.setIntOne(null);
    testingBean3.setIntTwo(1);
    testBeanList.add(testingBean3);

    Collections.sort(testBeanList,
            new Comparator<TestingBean>() {
                @Override
                public int compare(final TestingBean obj1,
                        final TestingBean obj2) {
                    if(obj1.getIntOne()==null || obj2.getIntOne()==null){
                        return obj1.getIntTwo().compareTo(obj2.getIntTwo());
                    }
                    else{
                        return obj1.getIntOne().compareTo(obj2.getIntOne());
                    }
                }
            });
    for (TestingBean testBean : testBeanList) {
        System.out.println(testBean.getIntOne()+" : "+testBean.getIntTwo());
    }

}
}

当我运行此代码时,我得到的输出为
null:1
1:1003
2:2002
但我的要求是输出应为
1:1003
2:2002
null:1
首先,对象应使用intOne排序,如果intOne是null,应使用intTwo对其进行排序。提前致谢。

谢尔盖·卡里尼琴科(Sergey Kalinichenko)

此代码检查intOnenull,并跳转到比较intTwo尽快为s任何两个的intOnes的检测为null

if(obj1.getIntOne()==null || obj2.getIntOne()==null){
    return obj1.getIntTwo().compareTo(obj2.getIntTwo());
}

这会产生您所看到的效果。如果您希望获得所描述的效果,请按如下所示更改代码:

if(obj1.getIntOne()==null && obj2.getIntOne()==null) {
    return obj1.getIntTwo().compareTo(obj2.getIntTwo());
} else if(obj1.getIntOne()==null && obj2.getIntOne()!=null) {
    // Null is greater than any non-null number
    return 1;
} else if(obj1.getIntOne()!=null && obj2.getIntOne()==null) {
    // Non-null is smaller than null
    return -1;
} else {
    return obj1.getIntOne().compareTo(obj2.getIntOne());
}

intTwo仅当两个都intOne为时,此更改才使用s null如果其中只有一个,则null的值将null解释为非常大的数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java 8中Collections.sort的问题

来自分类Dev

Java-Collections.sort()的问题

来自分类Dev

Collections.sort()可与Comparable或Comparator一起使用?

来自分类Dev

为什么Collections.sort使用相同的参数两次调用Comparator?

来自分类Dev

Collections.sort(<StringDate>,新的Comparator)没有正确比较日期

来自分类Dev

Collections.sort(<StringDate>,新的Comparator)没有正确比较日期

来自分类Dev

PriorityQueue与Collections.sort

来自分类Dev

Collections.sort()错误

来自分类Dev

Collections.Sort()的行为;

来自分类Dev

PriorityQueue与Collections.sort

来自分类Dev

Collections.sort()错误

来自分类Dev

Collections.sort()在大型ArrayList中失败,经常排序

来自分类Dev

将比较器传递给Java中的collections.sort()?

来自分类Dev

python继承中面临的问题

来自分类Dev

多线程中面临的问题

来自分类Dev

PriorityQueue vs Collections.sort

来自分类Dev

Collections.sort和Object []

来自分类Dev

Collections.sort未排序

来自分类Dev

Collections.sort(...)如何工作?

来自分类Dev

Collections.sort多个条件

来自分类Dev

Collections.sort()期间的异常

来自分类Dev

Collections.sort未排序

来自分类Dev

如何取消 Collections.sort()

来自分类Dev

Collections.sort 创建重复?

来自分类Dev

在python中旋转值时面临的问题

来自分类Dev

iOS中斜杠键盘面临的问题

来自分类Dev

在iOS中获取令牌时面临的问题

来自分类Dev

Angular 6中Instascan库面临的问题

来自分类Dev

颤振中的下拉按钮面临问题