【问题标题】:Converting a wrapper class array to primitive array using ArrayUtils使用 ArrayUtils 将包装类数组转换为原始数组
【发布时间】:2020-09-07 17:41:37
【问题描述】:

我创建了一个 Integer 包装类的 ArrayList,然后将其转换为 Integer 类型数组。现在我的目标是将其转换为 int 类型数组。尝试使用 ArrayUtils.toPrimitive() 方法解决问题。但它有一些问题。 这是我的代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.lang.Object;

public class ArrayListToArray {
    public static void main(String[] args) {

        // Convert to int array in one line

        ArrayList<Integer> list = new ArrayList<Integer>();

        list.add(Integer.parseInt("1"));
        list.add(Integer.parseInt("2"));
        list.add(Integer.parseInt("3"));
        list.add(Integer.parseInt("4"));

        Integer[] wrapperArr = list.toArray(new Integer[list.size()]);

        // If you want a `primitive` type array
        int[] arr = ArrayUtils.toPrimitive(wrapperArr);

        System.out.println(Arrays.toString(arr));
    }
}

显示错误ArrayUtils 无法解析。 现在执行代码。

如何在不编写任何循环的情况下解决问题? 我正在探索 java 内置类、方法和包。

或者是否有ArrayUtils 以外的其他方法 来做同样的事情?

提前致谢。 :-)

【问题讨论】:

  • ArrayUtils 似乎来自 Apache Commons。对于没有依赖关系的解决方案,试试这个:int[] arr = list.stream().mapToInt(Integer::valueOf).toArray();
  • ^ 您应该更喜欢这样,但您也可以使用 import org.apache.commons.lang3.ArrayUtils; 导入 ArrayUtils
  • 谢谢@JohannesKuhn,你的小费对我有用。

标签: java arrays arraylist wrapper primitive


【解决方案1】:

整数到整数数组转换的解决方案,不用ArrayUtils:

    final int[] arr = new int[wrapperArr.length];
    Arrays.setAll(arr, i -> wrapperArr[i]);

反之亦然,int to Integer数组:

    final Integer[] wrapperArr = new Integer[arr.length];
    Arrays.setAll(wrapperArr, i -> arr[i]);

奖金:

  1. ArrayList of Integers to int array.

     final List<Integer> list = new ArrayList<>();
     list.add(1);
     list.add(2);
     list.add(3);
    
     final int[] arr = new int[list.size()];
     Arrays.setAll(arr, list::get);
    
  2. ArrayList of Integers (as Strings) to int array.

     final List<String> list = new ArrayList<>();
     list.add("1");
     list.add("2");
     list.add("3");
    
     final int[] arr = new int[list.size()];
     Arrays.setAll(arr, i -> Integer.parseInt(list.get(i)));
    

【讨论】:

    【解决方案2】:

    您的导入可能有误,或者“commons-lang3”jar 可能不在构建路径中。

    import org.apache.commons.lang3.ArrayUtils
    

    【讨论】:

    • 我也试过了。但它显示 无法解析导入 org.apacheJava(268435846)
    • 检查你的类路径和构建路径是否“commons-lang3” jar 可用与否
    • 或者使用 Maven 或 Gradle。
    【解决方案3】:

    一种可能性是,您的代码引用了ArrayUtils 类,该类不是由org.apache.commons.commons-lang3 提供的,而是来自其他一些依赖项。重新检查您的导入。

    删除您当前的导入并重新导入。 IDE 可能会帮助建议这些类。确保使用 org.apache.commons.lang3.ArrayUtils 导入。 确保您在 pom.xml 中有以下依赖项。

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
    

    但是,除非有特殊原因,否则请使用 java streams() 并获取原始数组,而不是使用外部依赖项

    【讨论】:

      猜你喜欢
      • 2010-10-08
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多