如何从 ArrayList<Double> 转换为 double[] [重复]

Posted

技术标签:

【中文标题】如何从 ArrayList<Double> 转换为 double[] [重复]【英文标题】:How to convert from ArrayList<Double> to double[] [duplicate] 【发布时间】:2015-10-22 04:13:09 【问题描述】:

有谁知道如何将双数组列表传递给另一个方法? (我已突出显示)我从编译器收到此消息:cannot convert from ArrayList to double[]

                ArrayList<Double> value  = new ArrayList<Double>();
                while (rs.next()) 
                  
                    ArrayList<Integer> r=new ArrayList<Integer>(); 
                    r.add(rs.getInt("Type"));
                    r.add(rs.getInt("Budget"));
                    r.add(rs.getInt("Day"));
                    r.add(rs.getInt("Preferences"));
                    int vec2[] = r.stream().mapToInt(t -> t).toArray();
                    double cos_sim=cosine_similarity(vec1,vec2);
                    value.add(cos_sim);
                

                pick_highest_value_here_and_display(value);
                ps.close();
                rs.close();
                conn.close();


            


    private void pick_highest_value_here_and_display(ArrayList<Double> value) 
            // TODO Auto-generated method stub
            **double aa[]=value ;**
            double highest=aa[0];
            for(int i=0;i<aa.length;i++)
            
                if(aa[i]>highest)
                    highest=aa[i];
                

            

            System.out.println(highest);
        

【问题讨论】:

@Jashaszun 的 double 方法与 int 相同吗? 除了可能重复的事实,正如某人已经说过的那样,您为什么要使其成为数组?您也可以通过索引获取 ArrayList 的元素,也可以通过索引修改它们。 你的 pick_highest_value_here_and_display 方法可以简单地是 double maxValue = Collections.max(...); 【参考方案1】:

您可以像使用 int[] 一样使用 Java8

ArrayList<Double> value  = new ArrayList<Double>();
double[] arr = value.stream().mapToDouble(v -> v.doubleValue()).toArray();

OR(根据yshavit下面的评论)

double[] arr = value.stream().mapToDouble(Double::doubleValue).toArray();

【讨论】:

谢谢!这就是我要找的:) 仅供参考,v -&gt; v.doubleValue 也可以作为 Double::doubleValue 完成(但它纯粹是风格:***.com/questions/24487805) ***.com/a/23688547/1011791 亲爱的 DownVoter 请解释您的反对意见。【参考方案2】:

如果您可以更改为Double[],那么您可以这样做:-

Double[] doubleArr=  value.toArray(new Double[value.size()]);

如果你想要double[],那么你可以这样做:-

double[] doubleArr= new double[value.size()];
    int index = 0;
    for(double i : value)
        doubleArr[index] = i; // unboxing is automtically done here
        index++;
     

【讨论】:

【参考方案3】:

您可以通过一次复制一个来将所有元素复制到double[],但您不需要这样做。

List<Double> value = Arrays.asList(1.1, 3.3, 2.2);

Optional<Double> max = value.stream().max(Comparator.<Double>naturalOrder());
System.out.println(max.get());

打印

3.3

【讨论】:

这很有用。我从未注意到max 方法,并且到目前为止一直在使用reduce 进行此类计算。【参考方案4】:

这是一个可行的解决方案:

        ArrayList<Double> a = new ArrayList<Double>();
        a.add(0.23);
        a.add(2.4);
        Double[] b = new Double[a.size()];
        b = a.toArray(b);
        for (int i = 0; i < b.length; i++) 
            System.out.println(b[i]);
        

【讨论】:

以上是关于如何从 ArrayList<Double> 转换为 double[] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如果 ArrayList<Double> 为空,我如何返回 true? [复制]

如何从 HashMap 中提取 ArrayList 并在 Java 中循环遍历它?

在Junit测试中,如何比较两个ArrayList 使用assertEquals(),还有更好的选择吗?

Plz帮我评估这个Kotlin函数转换AnyList的ArrayList?到Double的ArrayList

如何声明ArryaList类分别对应String、Double类型的对象mylist、mylist2?

防止在java中两次显示Arraylist值