我有以下ArrayList List<DataSt> list1
哪里list1
具有以下值( float ):
<25.89, 21.23>
< 5.89, 1.23>
< 3.69, 20.23>
< 2.89, 121.23>
<125.89, 231.23>
.
.
.
< 28.89, 41.23>
和DataSt
具有以下结构:
public class DataSt {
private float a;
private float b;
public DataSt(float a , float b){
this.a=a;
this.b=b;
}
}
现在我需要从第一列中找到最小值,即 <25.89, 5.89, 3.69, 2.89, 125.89 ... 28.89>
它必须返回 2.89
然后从 <25.89, 5.89, 3.69, 2.89, 125.89 ... 28.89>
中找到最大值它必须返回 125.89
现在对第二列重复相同的操作,并将它们存储为 4 个不同的变量,分别为 min_col1、max_col1、min_col2 和 max_col2。
min_col1 = 2.89
max_col1 = 125.89
min_col2 = 1.23
max_col2 = 231.23
我一直在寻找各种解决方案,这些解决方案建议使用两个 for 循环,这确实很耗时,还有一些线程建议使用 stream() 来查找整个列表(即,不是每个列)。
有没有有效的方法来做到这一点?我也在关注 Apache Commons。
最佳答案
如果您需要的只是找到这些值,则循环遍历列表一次就足够了。我建议学习一点 Big O 表示法,以了解算法的性能。
你可以这样做:
float min_col1 = Float.MAX_VALUE;
float max_col1 = Float.MIN_VALUE;
float min_col2 = Float.MAX_VALUE;
float max_col2 = Float.MIN_VALUE;
for (DataSt data : list1) {
if (data.getA() < min_col1) {
min_col1 = data.getA();
}
if (data.getA() > max_col1) {
max_col1 = data.getA();
}
if (data.getB() < min_col2) {
min_col2 = data.getB();
}
if (data.getB() > max_col2) {
max_col2 = data.getB();
}
}
关于java - 查找对象 ArrayList 中每个字段的最小值/最大值的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45411692/