从整数数组创建一个对象数组

3

显然我有些东西不理解。我有一个基本类型的 int 数组, 我需要将其转换为我的数据类型数组。这是我尝试过的方法。

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或其他中间和终端方法的组合来将整数数组转换为我的对象数组。正确的转换方式是什么?

2个回答

7
你需要使用mapToObj创建一个新的对象流,然后使用toArray而不是collect来将结果作为数组获取。
StupidInt[] myInts = IntStream.of(ints).mapToObj(StupidInt::new).toArray(StupidInt[]::new);

1
太好了!感谢你。我曾经尝试使用mapToObj,但不知道在末尾添加toArray,当然也不知道如何传入类构造函数。(现在我知道了。) - Machtyn
@Machtyn 很高兴能帮忙。 - Unmitigated

2

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

在这种情况下,要添加一个新的整数,您可以使用add方法,要获取一个整数,您将使用get(position)方法或find方法查找其是否存在并获取位置。

或者,您可以简单地使用ArrayList类,或者如果您想要,我可以与您分享一个列表结构,它允许您完成所需的操作,具有大多数您可以想到的方法,实现可比性,可以排序,实现可迭代,并且非常高效。


1
感谢您提供的额外答案。我正在寻找的答案是@hev1提供的。我尝试过mapToObj,但不知道结构,并且不知道在末尾添加toArray。我相信您提供的内容可能会帮助其他人。 - Machtyn
@Machtyn 谢谢你的点赞和评论,你真是个了不起的人! - Nicholas Gooding Rios

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接