嗨,下面是我的示例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对其进行排序。提前致谢。
此代码检查intOne
对null
,并跳转到比较intTwo
尽快为s任何两个的intOne
s的检测为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] 删除。
我来说两句