从int数组创建对象数组

z9smfwbn  于 2021-07-12  发布在  Java
关注(0)|答案(2)|浏览(297)

显然,我不明白什么。我有一个原始的数组 int s、 我需要把它转换成我自己类型的数组。这是我试过的。

public class StupidInt {
   @JsonProperty("ID")
   private int id;

   public StupidInt(int id) { this.id = id; }

   public int getId() { return this.id; }
}

public static void main(String []args){
   int[] ints = {1,2,4,67};
   StupidInt[] myInts = IntStream.of(ints).map(StupidInt::new).collect(Collectors.toList());
}

正如您所料,myints行有一个问题,这个问题是“无法将stupidint转换为int”。但我不确定要使用什么map或foreach或任何中间和终端方法组合来将int数组转换为我的对象数组。正确的转换方法是什么?

xuo3flqw

xuo3flqw1#

你需要使用 mapToObj 创建新的对象流和 toArray 而不是 collect 以数组形式获得结果。

StupidInt[] myInts = IntStream.of(ints).mapToObj(StupidInt::new).toArray(StupidInt[]::new);
ws51t4hk

ws51t4hk2#

@hev1给出的答案很简单,是一个终端方法的最佳答案。
如果您需要不同的解决方案,我在这里提供两种不同的选择。第一种是中间方法,用于创建基元数组;第二种方法是一种完全不同的解决问题的方法,它不创建基元数组,而是创建一个类型对象的“列表”,该列表反映基元类型,也可以处理任何类型或对象:
解决方案1:

int[] ints = {1,2,4,67};
StupidInt[] myInts = new StupidInt[ints.length];
for (int i = 0; i < myInts.length; i++) {
    myInts[i] = new StupidInt(ints[i]);
}

解决方案2:

public class StupidIntList {

    private ArrayList<Integer> ids;

    public StupidIntList() { 
        this.ids = new ArrayList<Integer>();
    }

    public void add(int id) {
        this.ids.add(id);
    }

    public int get(int pos) { 
        return this.ids.get(pos); 
    }

    public boolean findId(int i_d) {
        for (Integer id : ids) {
            if(id == i_d)
                return true;
        }
        return false;
    }

    public String toString() {
        String res = "[";
        for (Integer id : ids) {
            res += id+",";
        }
        return res.substring(0, res.lastIndexOf(","))+"]";
    }

    public static void main(String []args){
        int[] ints = {1,2,4,67};
        StupidIntList myInts = new StupidIntList();
        for (int i = 0; i < ints.length; i++) {
            myInts.add(ints[i]);
        }
        System.out.println(myInts);
    }
}

在这种情况下,要添加一个新的int,您需要使用add方法并获得一个int,您需要使用get(position)方法或find方法来查看它是否存在并获得位置。
或者你可以简单地使用arraylist类,或者如果你愿意的话,我可以和你分享一个列表结构,它允许你完成你需要完成的事情,有你能想到的大多数方法,实现可比较的,可以排序的,实现iterable的,非常有效。

相关问题