【问题标题】:Convert List<Object> to String[] in Java在 Java 中将 List<Object> 转换为 String[]
【发布时间】:2013-01-24 06:14:14
【问题描述】:

我需要从List&lt;Object&gt; 转换为String[]

我做了:

List<Object> lst ...
String arr = lst.toString();

但我得到了这个字符串:

["...", "...", "..."]

只是一个字符串,但我需要String[]

非常感谢。

【问题讨论】:

  • 如何将随机的Object转成String?
  • toString (在大多数类中)纯粹用于诊断消息,而不是“生产”。
  • 我想转换 String[] 中的所有列表而不对其进行迭代。
  • 你看过 List 的规范了吗? (我猜不是,否则你会注意到 toArray。)

标签: java arrays string list


【解决方案1】:

您必须遍历列表并填写您的String[]

String[] array = new String[lst.size()];
int index = 0;
for (Object value : lst) {
  array[index] = (String) value;
  index++;
}

如果列表是String 值,List 那么这就像调用lst.toArray(new String[0]) 一样简单;

【讨论】:

  • array[index] = (String) value 更改为 array[index] = String.valueOf( value )。如果列表包含任何内容,但字符串除外,那么答案将崩溃。也许这就是 OP 想要的。
【解决方案2】:

您可以使用 toArray() 转换为对象数组,然后使用this method 将对象数组转换为字符串数组:

Object[] objectArray = lst.toArray();
String[] stringArray = Arrays.copyOf(objectArray, objectArray.length, String[].class);

【讨论】:

  • objectArray仍然可以用作String[]时,为什么要额外的数组复制?
  • 查看链接问题的底部 - 将 objectArray 转换为 String[] 会导致 ClassCastException。这个答案解释得更好:stackoverflow.com/a/1018774/1063716
  • 是的,如果列表包含字符串以外的对象。但即使在您的代码中也会发生这种情况。
  • List&lt;Object&gt; lst = new ArrayList&lt;Object&gt;(); lst.add(1); 这个测试用例我得到 ArrayStoreException。
【解决方案3】:

Java 8 可以选择使用以下流:

List<Object> lst = new ArrayList<>();
String[] strings = lst.stream().toArray(String[]::new);

【讨论】:

    【解决方案4】:

    如果我们非常确定List&lt;Object&gt; 将包含String 的集合,那么不妨试试这个。

    List<Object> lst = new ArrayList<Object>();
    lst.add("sample");
    lst.add("simple");
    String[] arr = lst.toArray(new String[] {});
    System.out.println(Arrays.deepToString(arr));
    

    【讨论】:

      【解决方案5】:

      这里有很多有用的概念:

      List<Object> list = new ArrayList<Object>(Arrays.asList(new String[]{"Java","is","cool"}));
      String[] a = new String[list.size()];
      list.toArray(a);
      

      打印字符串数组的提示:

      System.out.println(Arrays.toString(a));
      

      【讨论】:

        【解决方案6】:

        使用Guava

        List<Object> lst ...    
        List<String> ls = Lists.transform(lst, Functions.toStringFunction());
        

        【讨论】:

          【解决方案7】:

          在 Kotlin 中有一个简单的方法

          var lst: List<Object> = ...
              
          listOFStrings: ArrayList<String> = (lst!!.map { it.name })
          

          【讨论】:

            猜你喜欢
            • 2021-08-08
            • 2018-11-23
            • 1970-01-01
            • 1970-01-01
            • 2018-07-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-04-01
            相关资源
            最近更新 更多