Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java-将基元双数组转换为集合_Java - Fatal编程技术网

java-将基元双数组转换为集合

java-将基元双数组转换为集合,java,Java,我希望有一个浮点数(双精度)和整数数组,如下所示- double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961, 828, 199858, 37325.3}; 然后我有一个函数返回最大和最小值 public static void getMaxArrVal(double[] myArr) { myCol = /* Code to convert myar

我希望有一个浮点数(双精度)和整数数组,如下所示-

double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961, 828, 199858, 37325.3};
然后我有一个函数返回最大和最小值

    public static void getMaxArrVal(double[] myArr) {           

        myCol = /* Code to convert myarr to collection should come here */
        System.out.println(Collections.min(myCol ));
        System.out.println(Collections.max(myCol ));
    }
}

getMaxArrVal(myArr);
我在将原始数据类型转换为集合时遇到问题。我尝试将其转换为双列表,尝试将myArr转换为char/String以检查一些内容,但显然没有任何效果

我一直看到原始数据类型的编译错误。我也试过双倍,但运气不好


我怎么可能将数组转换为collection&在这个数组上计算min/max。我非常感谢您能帮助她。

番石榴有很好的解决方案

Lists.newArrayList(double[])

如果您在java8上运行此代码,可以尝试lambdas:

Arrays.stream(myArr).max();


这在Java 8中非常有效:

Arrays.stream(myArr).boxed().collect(Collectors.toCollection(ArrayList::new));
当然,可以使用任何
集合
代替
ArrayList
。我这里的代码实际上可以简化为
Collectors.toList()

此外,如中所述,
DoubleStream
有自己的
min()
max()
方法,使得转换无效。只需使用使用数组创建的两个流。stream(myArr)并调用这些方法。

double[]primitives=newdouble[]{1.0,2.0,3.0};
double[] primitives = new double[] { 1.0, 2.0, 3.0};
List<Double> objects = new ArrayList<>();
for(double num : primitives) {
    objects.add(num);
}
列表对象=新的ArrayList(); for(双数字:基本体){ 对象。添加(num); }
公共静态void main(字符串[]args)引发异常{
双[]myArr={0,0,95,9.5,19,610.51217,5.14038.66,10.237961,828,199858,37325.3};
Double min=Arrays.stream(myArr.min)(Comparator.naturalOrder()).get();
Double max=Arrays.stream(myArr.max)(Comparator.naturalOrder()).get();
系统输出打印项次(最小值);
系统输出打印项次(最大值);
}

如果您不需要收集到任何其他内容,除了查找
max
min
,请直接从数组创建流。在这种情况下,您根本不需要创建单独的集合。

使用数组。排序将按升序对数组进行排序。因此,您知道min将是数组的第一个元素myArr[0],max将是数组myArr[myArr.length-1]中的最后一个元素

double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961,  828, 199858, 37325.3};
Arrays.sort(myArr);
System.out.println(myArr[0]);
System.out.println(myArr[myArr.length-1]);
以下将导致


0.0请检查您的拼写和代码。这将不起作用,因为像生成的
DoubleStream
这样的基本流在其
collect()方法中不接受
Collector
s。Stream没有拼写straem。谢谢您的评论!DoubleStream没有提供collect(Collector)方法,这对我来说是意外的。它没有多大意义,因为
Collector
s是泛型的,您不能拥有
收集器。尽管如此,我们都希望这样的事情有时可能发生;这个问题本质上是一个完全重复的问题。这种方法将改变原始数组的顺序。但是如果OP不在乎-完美的解决方案。谢谢你,迈克。我需要数组顺序保持不变。不要忘记
对象只能使用一次。只需使用
Arrays.stream(myArr)
两次…@YassinHajaj,我做到了。你是对的。谢谢你的评论,肯。我更喜欢双倍
,因为我已经用这种类型写了很多代码。所以在这种情况下,
Double
不太管用。然而,这对我来说是一个很好的未来参考。非常感谢。
public static void main(String[] args) throws Exception {

    Double [] myArr = {0., 0., 95., 9.5, 19., 610.5, 1217., 5.14, 4038.66, 10.23,  7961., 828., 199858., 37325.3};      

    Double min = Arrays.stream(myArr).min(Comparator.<Double>naturalOrder()).get();
    Double max = Arrays.stream(myArr).max(Comparator.<Double>naturalOrder()).get();

    System.out.println(min);
    System.out.println(max);
}
double[] myArr = {0, 0, 95, 9.5, 19, 610.5, 1217, 5.14, 4038.66, 10.23, 7961,  828, 199858, 37325.3};
Arrays.sort(myArr);
System.out.println(myArr[0]);
System.out.println(myArr[myArr.length-1]);