打印ArrayList中最小的对象

时间:2018-12-12 21:48:46

标签: java

public static double getSmallest(ArrayList<Wert> arr) {
    double small = wert.getZahl();

    for (Wert wert : arr) {
        if (arr.size() < 2) {
            small = wert.getZahl();
        } else {
            if (small > wert.getZahl())
                small = wert.getZahl();
        }
    }

    return small;
}

我正在将包含值和单位的对象存储在Arraylist中。此部分应返回数组中的最小值,但始终返回0。怎么了?

3 个答案:

答案 0 :(得分:1)

尝试此操作,如果arraylist为0或大小为null,将返回0,让我们看看您的错误

1)在for循环中删除该if语句,您应在循环之前检查  数组列表

2)让我们假设double small = wert.getZahl();是默认值top return

3)如果arraylist为null或为空,则返回默认值

4)或循环访问arraylist,如果任何元素小于默认值,则将其分配给small并最终将其返回

public static double getSmallest(ArrayList<Wert> arr) {
    double small = wert.getZahl();

     if(arr==null || arr.isEmpty()){
        return small;
      }
        else {
          for(Wert w : arr) {
            if(small>w.getZahl()) {
                small=w.getZahl();
            }
        }
        return small;
    }

使用Java-8最高级

double small = arr.stream().mapToDouble(i->Double.valueOf(getZahl())).min().orElse(wert.getZahl());

答案 1 :(得分:1)

您可以使用Java8流功能来获取完整的列表统计信息。

List<Double> arr = Arrays.asList(2.0, 11.0, 13.0, 17.0, 1.5, 19.0, 23.1, 29.1);
DoubleSummaryStatistics stats = arr.stream().mapToDouble((x) -> x).summaryStatistics();
System.out.println(stats);

输出

DoubleSummaryStatistics{count=11, sum=131.600000, min=1.500000, average=11.963636, max=29.100000}

您只能获得分钟数,例如:

System.out.println(stats.getMin());

输出将是:

1.5

答案 2 :(得分:0)

您不需要检查ArrayList的大小,仅需iteratecheck即可:

public static double getSmallest(ArrayList<Wert> arr) {
    double small = Integer.MAX_VALUE;
    for (Wert wert : arr) {
        if (small > wert.getZahl())
            small = wert.getZahl(); 
    }
    return small;
}

public static double getSmallest(ArrayList<Wert> arr) {
    double small = Integer.MAX_VALUE;
    for (Wert wert : arr) {
        small = Math.min(small, wert.getZahl()); 
    }
    return small;
}

使用Streams的升级解决方案:

public static double getSmallest(ArrayList<Wert> arr) {  
  return arr.stream().map(Wert::getZahl).min(Integer::compareTo).orElse(Integer.MAX_VALUE);
}