将List <string>转换为新的Object [] {}

时间:2018-08-07 13:30:52

标签: java

我有这个:

data.put(1, 
            new Object[] { listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName(),
            listUserColumns.get(field++).getName(), listUserColumns.get(field++).getName() });

我想将此listUserColums(类型为String的列表)直接转换为新的Object[](类型为java.lang.object的类型),但不知道如何?

3 个答案:

答案 0 :(得分:1)

这取决于您打算获得的内容,问题尚不清楚。

当需要获取列表中所有元素的名称数组时,可以使用Stream<T>

Object[] names = listUserColumns.stream().map(c -> c.getName()).toArray();

但是,由于数组是ArrayList的内部表示形式,因此无法广播此listUserColums 。您可以使用此

创建一个新数组,该数组包含对与列表相同元素的引用。
Object[] elements = listUserColumns.toArray();

在您的情况下,看起来listUserColumns不是List<String>,这就是为什么这些方法的结果会不同的原因(在第一种情况下是字符串数组,在第二种情况下是自定义数组类型)。

答案 1 :(得分:1)

您想要的东西似乎更像

data.put(1, listUserColumns.stream().map(c -> c.getName()).toArray());

对于子集

data.put(1, listUserColumns.subList(from, to)
                           .stream().map(c -> c.getName()).toArray());

答案 2 :(得分:0)

您可以执行toArray()方法:

ArrayList<String> arr = new ArrayList<>();
arr.toArray()

哪个:

  

以正确的顺序返回一个包含此列表中所有元素的数组(从第一个元素到最后一个元素)。