java - 查找对象 ArrayList 中每个字段的最小值/最大值的有效方法

标签 java arraylist max min

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

相关文章:

Java Intstream 获取具有空值的多维数组的索引

java - Java 中的局部变量 + lambda 函数出错

java - 将 arrayList<Class> 保存为 Room 内的字符串

java - 按升序排列数组列表

matlab - 在 MATLAB 中计算向量元素之间的最大距离

java - 从给定变量中获取最大变量

java - 在数组中找到最大值的预期赋值次数

java - 控制Web应用程序中方法的调用率

java - java中从ArrayList中删除 "regex duplicates"

java - 使用java左键单击任务托盘图标上的弹出窗口(菜单)