【问题标题】:Minimum element of an array [duplicate]数组的最小元素[重复]
【发布时间】:2014-12-19 02:27:20
【问题描述】:

我在 Java 中有一个 double[] foo

是否有一个库函数可以提取这个数组中的最小值?我知道我可以构建一个,但如果库函数可用,这不是一个好习惯。 java.util.Arrays 里面什么都没有。

(在 C++ 中,我们有 std::min_element 等,甚至在 C++11 中还有一个新函数可以同时获取最小值和最大值!)

【问题讨论】:

  • 当它需要大量复杂的代码行时,这不是一个好习惯。那不是你的情况。只需实施一个简单的三行解决方案。
  • 很遗憾不是这样。一旦您检查了空值、零长度数组等,超过 3 行。

标签: java arrays


【解决方案1】:

假设 Java 8:

double[] arr = { 1.0, 2.0 };
double min = DoubleStream.of(arr)
                         .min()
                         .getAsDouble();

【讨论】:

  • +1,漂亮(鉴于 Java 8 是当前标准并且我标记为 Java,这是对我问题的最佳答案)但还没有 Java 8。
【解决方案2】:

嗯,Collections 类有这样的方法。

你可以写

Double[] arr = {0.5,0.7};
System.out.println("min = " + Collections.min(Arrays.asList(arr)));

或者让它更短:

System.out.println("min = " + Collections.min(Arrays.asList(-67,-89,64,34)));

【讨论】:

  • +1 但对将double[] 转换为Double[] 持保留态度
  • @SlodgeMonster Arrays.asList 在双精度数组上将返回一个带有单个 double[] 元素的列表,因此您必须使用双精度数组。
  • 谢谢,我最终将double[] 更改为Double[]Collections.min(Arrays.asList(arr)) 是标准 Java,不会进行深拷贝。
【解决方案3】:

您可以使用ArrayUtils.toObjectdouble[] 转换为Double[]
然后使用Arrays.asList 将数组转换为列表,并使用Collections.min 找到最小值。

double[] d = new double[] {1, 2, 3};
Double minValue = Collections.min(Arrays.asList(ArrayUtils.toObject(d)));
System.out.println(minValue);

【讨论】:

    【解决方案4】:

    您可以使用com.google.common.primitives.Doubles

     double[] arr = { 4.3, 4.9 };
     double min = Doubles.min(arr);
     //OR
     //double min = Doubles.min(4.3, 4.9);
    

    【讨论】:

      猜你喜欢
      • 2016-05-12
      • 1970-01-01
      • 2011-08-29
      • 2020-07-19
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      相关资源
      最近更新 更多