gpt4 book ai didi

java - 比较数组列表中不同的对象值

转载 作者:行者123 更新时间:2023-12-02 07:21:39 25 4
gpt4 key购买 nike

根据用户偏好,我想比较数组列表的对象值并获取最大值。我的第一个方法是为对象属性定义一个函数并遍历数组列表。

    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 个相似的函数似乎并不正确,所以我尝试将所有函数组合起来并添加一个 switch/case

    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 个函数,但这也不让我高兴。您有什么改进的想法吗?

谢谢。

最佳答案

像这样实现您所有的不同需求:

class SettingsAComparator extends Comparator<MyModel> {
@Override
public int compare(MyModel m1, MyModel m2) {
return m1.valueA() - m2.valueA();
}
}

class SettingsBComparator extends Comparator<MyModel> {
// Please use better names.
// you can implement as many Comparators as necessary.
}

并将方法更改为

private MyModel getMaxValue(ArrayList<MyModel> myModelList, Comparator<MyModel> comparator) {
return Collections.max(myModelList, comparator);
}

这样,如果您的类获得了新属性,您始终可以添加不同的比较器,但您永远不必担心再次更改 getMaxValue()。您还可以实现复杂的比较器,它考虑多个属性值。

关于java - 比较数组列表中不同的对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14137630/

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