我怎么能把 ArrayList<Object> 转换为 ArrayList<String>?

2022-08-31 09:50:24
ArrayList<Object> list = new ArrayList<Object>();
list.add(1);
list.add("Java");
list.add(3.14);
System.out.println(list.toString());

我试过了:

ArrayList<String> list2 = (String)list; 

但它给了我一个编译错误。


答案 1

由于这实际上不是字符串列表,因此最简单的方法是循环访问它并自行将每个项目转换为新的字符串列表:

List<String> strings = list.stream()
   .map(object -> Objects.toString(object, null))
   .collect(Collectors.toList());

或者,当您尚未使用 Java 8 时:

List<String> strings = new ArrayList<>(list.size());
for (Object object : list) {
    strings.add(Objects.toString(object, null));
}

或者,当您尚未使用 Java 7 时:

List<String> strings = new ArrayList<String>(list.size());
for (Object object : list) {
    strings.add(object != null ? object.toString() : null);
}

请注意,您应该针对接口(在本例中为 java.util.List)声明,而不是针对实现进行声明。


答案 2

这样做是不安全的!
想象一下,如果你有:

ArrayList<Object> list = new ArrayList<Object>();
list.add(new Employee("Jonh"));
list.add(new Car("BMW","M3"));
list.add(new Chocolate("Twix"));

将这些对象的列表转换为任何类型都没有意义。


推荐