根据用户的喜好,我想比较一个数组列表的对象值并获取最大值。我的第一种方法是为对象属性定义一个函数并遍历数组列表。比较来自arraylist的不同对象值
private MyModel getMaxValueA(ArrayList<MyModel> myModelList) {
MyModel res = null;
for (MyModel myModel : myModelList) {
if (myModel != null) {
if (myModel.valueA() > res.valueA()) {
res = myModel;
}
} else {
res = myModel;
}
}
return res;
}
的问题是,我有4个不同的值,我想比较,并确定4类似的Funktion似乎并没有被正确的是,所以我尝试了所有的功能组合,并添加了开关/箱
private MyModel getMaxValueA(ArrayList<MyModel> myModelList, Setting mySetting) {
MyModel res = null;
for (MyModel myModel : myModelList) {
if (myModel != null) {
switch (mySetting) {
case settingA:
if (myModel.valueA() > res.valueA()) {
res = myModel;
}
break;
case settingB:
if (myModel.valueB() > res.valueB()) {
res = myModel;
}
break;
........
} else {
res = myModel;
}
}
return res;
}
这有点短,只有1个而不是4个功能,但它也不让我高兴。你有什么想法来改进它吗?
谢谢。
现在您将所有难看的代码都放入'compare()'中,因为必须考虑该设置。编写,维护和调试更容易,针对不同需求使用不同的Comparator类,而不是将所有逻辑合并为一个。 – jlordo
恕我直言,这取决于他是否已经有一个设置对象。如果该设置对象是为此目的而创建的,那么您提到的具有多个比较器的效果会更好。 – Subin
即使他已经有一个'Settings'对象,我的方式更好,因为它会生成短暂的可维护方法。他可以根据'Setting'来选择比较器,而不是像一个巨大的比较器,它包含像(伪代码)if(设置==选项1)... else else(设置==选项2)的代码......' – jlordo