如何转换Object []到int []

时间:2015-07-29 10:05:24

标签: java vector cosine-similarity

我想将myVector传递给另一个类(Case.java),但我收到此类错误消息。类型不匹配:无法从Object []转换为int [] 。有谁能告诉我如何解决这个问题?

User.java

JButton btnNewButton = new JButton("Process");

btnNewButton.setBounds(360, 296, 89, 23);
contentPane.add(btnNewButton);

btnNewButton.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        Integer a = (comboBox.getSelectedIndex() + 1);
        Integer b = (comboBox_1.getSelectedIndex() + 1);
        Integer day = (comboBox_2.getSelectedIndex() + 1);
        ArrayList<Integer> myVector = new ArrayList<Integer>();
        myVector.add(a);
        myVector.add(b);
        myVector.add(day);

        Case ca = new Case();
        try {
            ca.addPlace(myVector);
            LoginGUI um = new LoginGUI();
            um.setVisible(true);

        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
    }
}

Case.java

public class Case {

    public Case() {
        // TODO Auto-generated constructor stub
    }

    public void addPlace(ArrayList<Integer> h) {

        int vec1[] = h.toArray();
        int vec2[] = {2, 1, 3, 2};

        double cos_sim = cosine_similarity(vec1, vec2);
    }

5 个答案:

答案 0 :(得分:3)

我们无法将Object[]转换为int[]。这两个类是水平的。

如果您愿意,可以使用明确向下投射Object[]转换为Integer[]包装类。

        Object[] obj ={10,30,20,100};
       Integer[] in = (Integer[]) obj;

答案 1 :(得分:3)

将新数组传递给toArray方法。像这样:

Integer[] vec = h.toArray(new Integer[h.size()]);

答案 2 :(得分:1)

使用Java8,这是可能的:

int[] vec1 =  h.stream().filter(t -> t != null).mapToInt(t -> t).toArray();

答案 3 :(得分:0)

我想你必须进行手动转换:

ArrayList<Integer> h = new ArrayList<>();
int[] result = new int[h.size()];
int index = 0;
for(int val:h){
    result[index++] =val; 
}

当然,如果你在原始ArrayList&#34; h&#34;中有空值,它可能抛出NullPointerException。

答案 4 :(得分:0)

首先,您没有将Object[]转换为int[],您在此处所做的是ArrayList<Integer>int[]。您获取无法从Object []转换为int [] 的错误是因为Integer[]无法直接转换为int[]

所以任何方法都无法直接使用这个。但你可以这样做: -

        int[] vec1= new int[h.size()];
        int index = 0;
        for(int i : h){
            vec1[index] = i;
            index++;
        }

但是,如果您可以将int[] vec1更改为Interger[] vec1,那么您可以这样做: -

 Integer[] vec1 =  h.toArray(new Integer[h.size()]);