在Java中将List<Object>转换为String[]

19
我需要将 List<Object> 转换为 String[]。 我已经做了:
List<Object> lst ...
String arr = lst.toString();

但我得到了这个字符串:

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

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

非常感谢。


1
如何将随机对象转换为字符串? - assylias
toString方法(在大多数类中)纯粹是用于诊断信息,而不是“生产”。 - Hot Licks
我想将String[]中的所有列表转换而无需迭代。 - calbertts
你看过List的规范吗?(我猜你没有,否则你就会注意到toArray了。) - Hot Licks
Java 8: https://dev59.com/iGUq5IYBdhLWcg3wHs2Y#31002358 - akhil_mittal
7个回答

28

您需要循环遍历列表并填充您的String[]

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

如果列表是由String值构成的,那么只需调用lst.toArray(new String[0])即可。


6
array[index] = (String) value更改为array[index] = String.valueOf( value )。如果列表中包含除字符串以外的任何内容,这个答案将会崩溃。也许这正是提问者想要的结果。 - Alexander Pogrebnyak

14

您可以使用toArray()将其转换为对象数组,然后使用此方法将对象数组转换为字符串数组:

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

为什么需要额外的数组复制,当objectArray仍然可以用作String[] - sundar
请查看链接问题底部 - 将 objectArray 强制转换为 String[] 会导致 ClassCastException。此答案解释得更好:http://stackoverflow.com/a/1018774/1063716 - Steve Chambers
如果列表中包含除字符串以外的对象,则返回“是”。但这种情况甚至在您的代码中也会发生。 - sundar
3
这段代码的意思是:创建了一个 Object 类型的列表 lst,并往其中添加了整数1。但是在这个测试用例中会出现 ArrayStoreException 异常。 - sundar

11
Java 8
Java 8也提供了使用流的选项。
List<Object> lst = new ArrayList<>(); 
lst.add("Apple"); 
String[] strings = lst.stream().toArray(String[]::new); 
System.out.println(Arrays.toString(strings));  // [Apple]

如果我们有一串Object,我们需要一个中间操作来进行对象到字符串的转换,以及一个终端操作来收集结果。我们可以使用Objects.toString(obj, null)或任何其他实现来进行字符串转换。
String[] output = lst.stream()
    .map((obj) -> Objects.toString(obj, null))
    .toArray(String[]::new);

我必须执行myObjects.stream().map(myObj::toString).toArray(String[]::new); - BugsOverflow

5
如果我们非常确定 List<Object> 将包含 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));

2

这里涉及到很多有用的概念:

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

2

使用Guava

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

0

在 Kotlin 中有一种简单的方法可用

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

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