爪哇 - 原始双数组转换成集合

问题描述:

我期待有花车(双打)&整数如下数组 -爪哇 - 原始双数组转换成集合

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来检查一些东西,但没有任何工作明显。

我不断看到原始数据类型的编译错误。我也尝试过Double,但没有运气。

我怎么可能将数组转换为集合&这个计算最小/最大值。我会很感激任何帮助她请。

+1

检查此http://*.com/questions/5178854/convert-a -double-array-to-double-arraylist#5178920 – prasad

+0

@prasad是正确的;这个问题本质上是一个确切的重复。 – bcsb1001

这与Java 8很好地工作:

Arrays.stream(myArr).boxed().collect(Collectors.toCollection(ArrayList::new)); 

当然,可以使用任何Collection而不是ArrayList。我在这里的代码实际上可以简化为Collectors.toList()

此外,如@nukie's answer,DoubleStream中所述,它有其自己的min()max()方法,使得转换无效。仅使用使用Arrays.stream(myArr)创建的两个流并调用这些方法。

+0

非常感谢。这有助于 – usert4jju7

番石榴配备了很好的解决方案

Lists.newArrayList(double[]) 

,如果你在java8运行这段代码,你可以尝试lambda表达式:

Arrays.stream(myArr).max(); 

Arrays.stream(myArr).max(); 
+0

请检查您的拼写,以及您的代码。这是行不通的,因为像生成的'DoubleStream'这样的原始流不会在'collect()'方法中接受'Collector'。流不是拼写。 – bcsb1001

+0

谢谢你的评论!这对我来说是意外的,DoubleStream不提供收集(收集器)方法) – nukie

+1

它没有多大意义,因为'收集器是通用的,你不能有'收集器'。尽管如此,我们都希望这样的事情有时可能会发生。 – bcsb1001

double[] primitives = new double[] { 1.0, 2.0, 3.0}; 
List<Double> objects = new ArrayList<>(); 
for(double num : primitives) { 
    objects.add(num); 
} 

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); 
} 

如果您不需要收集任何东西,除了发现maxmin,直接从数组创建流。在这种情况下,你根本不需要创建单独的集合。

+0

不要忘记'Stream'对象只能使用一次。只需使用'Arrays.stream(myArr)'两次... –

+0

尝试运行您的代码。 –

+1

@YassinHajaj我做到了。你说得对。感谢您的评论。 –

使用Arrays.sort会按升序对数组进行排序。因此,您知道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 < - 分钟

199858.0 < - 最大

+1

这种方法会改变原始数组的顺序。但是,如果OP不在乎 - 完美的解决方案。 –

+0

谢谢Mike。我需要数组顺序保持不变。 – usert4jju7