如何从 Object[] 转换为 int[]
how to convert from Object[] to int[]
我想将 myVector
传递给另一个 class (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);
}
我们无法将 Object[]
转换为 int[]
。那两个 class 是水平的。
如果需要,可以使用显式 向下转换 将 Object[]
转换为 Integer[]
包装器 class。
Object[] obj ={10,30,20,100};
Integer[] in = (Integer[]) obj;
将一个新数组传递给 toArray
方法。像这样:
Integer[] vec = h.toArray(new Integer[h.size()]);
使用 Java8 这将是可能的:
int[] vec1 = h.stream().filter(t -> t != null).mapToInt(t -> t).toArray();
我想你必须执行手动转换:
ArrayList<Integer> h = new ArrayList<>();
int[] result = new int[h.size()];
int index = 0;
for(int val:h){
result[index++] =val;
}
当然,如果原始 ArrayList 中有空值,它可能会抛出 NullPointerException "h"。
首先你不是把Object[]
转换成int[]
,你在这里做的是ArrayList<Integer>
到int[]
。你得到的错误 cannot convert from Object[] to 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()]);
我想将 myVector
传递给另一个 class (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);
}
我们无法将 Object[]
转换为 int[]
。那两个 class 是水平的。
如果需要,可以使用显式 向下转换 将 Object[]
转换为 Integer[]
包装器 class。
Object[] obj ={10,30,20,100};
Integer[] in = (Integer[]) obj;
将一个新数组传递给 toArray
方法。像这样:
Integer[] vec = h.toArray(new Integer[h.size()]);
使用 Java8 这将是可能的:
int[] vec1 = h.stream().filter(t -> t != null).mapToInt(t -> t).toArray();
我想你必须执行手动转换:
ArrayList<Integer> h = new ArrayList<>();
int[] result = new int[h.size()];
int index = 0;
for(int val:h){
result[index++] =val;
}
当然,如果原始 ArrayList 中有空值,它可能会抛出 NullPointerException "h"。
首先你不是把Object[]
转换成int[]
,你在这里做的是ArrayList<Integer>
到int[]
。你得到的错误 cannot convert from Object[] to 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()]);