我有以下ArrayList List<DataSt> list1
,其中list1
具有以下值(浮点数):
<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/