数组的最小元素[重复]
Posted
技术标签:
【中文标题】数组的最小元素[重复]【英文标题】: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 行。 【参考方案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.toObject 将double[]
转换为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);
【讨论】:
以上是关于数组的最小元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在一个语句中查找无序数组中的最大(或最小)元素,同时保持顺序[重复]