如何将 ArrayList<Object> 转换为 ArrayList<String>?

新手上路,请多包涵
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;

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

原文由 rtf 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

由于这 实际上 不是一个字符串列表,最简单的方法是遍历它并自己将每个项目转换为一个新的字符串列表:

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

或者当你还没有使用 Java 16 时:

 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 在这种情况下)声明,而不是实现。

原文由 BalusC 发布,翻译遵循 CC BY-SA 4.0 许可协议

这样做是不安全的!

想象一下,如果你有:

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

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

原文由 athspk 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题