代码之家  ›  专栏  ›  技术社区  ›  Student

是否有一个内置的Java方法来封装数组?

  •  24
  • Student  · 技术社区  · 16 年前

    我是否可以使用标准方法来代替此自定义方法?

    public static Byte[] box(byte[] byteArray) {
        Byte[] box = new Byte[byteArray.length];
        for (int i = 0; i < box.length; i++) {
            box[i] = byteArray[i];
        }
        return box;
    }
    
    4 回复  |  直到 7 年前
        1
  •  23
  •   Ian Roberts    13 年前

    不,JDK中没有这样的方法。

    然而,通常情况下, apache commons lang 提供

    提供 这样的方法 .

        2
  •  16
  •   YoYo    11 年前

    输入Java 8,并且可以执行以下(装箱):

    int [] ints = ...
    Integer[] boxedInts = IntStream.of(ints).boxed().toArray(Integer[]::new);
    

    但是,这只适用于 int[] , long[] 和 double[] . 这不适用于 byte[] .

    你也可以很容易地完成反向(拆箱)

    Integer [] boxedInts = ...
    int [] ints = Stream.of(boxedInts).mapToInt(Integer::intValue).toArray();
    
        3
  •  2
  •   Nacho    10 年前

    除了Yoyo的回答,你还可以为 任何 原始类型;let primArray 是类型的标识符 PrimType[] 然后你 可以 执行以下操作:

    BoxedType[] boxedArray = IntStream.range(0, primArray.length).mapToObj(i -> primArray[i]).toArray(BoxedType[] :: new);
    
        4
  •  0
  •   Dragas    7 年前

    在研究ApacheCommonsLang源代码时,我们可以看到它只是调用 Byte#valueOf(byte) 在每个数组元素上。

        final Byte[] result = new Byte[array.length];
        for (int i = 0; i < array.length; i++) {
            result[i] = Byte.valueOf(array[i]);
        }
        return result;
    

    同时,普通Java LoT工具表明拳击是不必要的,你可以按原样分配元素。

    所以从本质上来说,你做的和ApacheCommons做的一样。