gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:17:59 25 4
gpt4 key购买 nike

您好 下面是我的示例 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());
}

}
}

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

最佳答案

此代码检查 intOne 是否为 null,并在 任何检测到两个 intOnenull:

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());
}

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

关于java - Collections.sort 中的 Comparator<> 面临问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25383436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com