我有以下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/

10-09 19:27