java object 转list_java - 如何将ArrayList <Object>转换为ArrayList <String>?

java - 如何将ArrayList 转换为ArrayList ?

ArrayList list = new ArrayList();

list.add(1);

list.add("Java");

list.add(3.14);

System.out.println(list.toString());

我试过了:

ArrayList list2 = (String)list;

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

rtf asked 2019-05-19T10:42:53Z

10个解决方案

103 votes

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

List strings = list.stream()

.map(object -> Objects.toString(object, null))

.collect(Collectors.toList());

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

List strings = new ArrayList<>(list.size());

for (Object object : list) {

strings.add(Objects.toString(object, null));

}

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

List strings = new ArrayList<>(list.size());

for (Object object : list) {

strings.add(object != null ? object.toString() : null);

}

请注意,您应该声明接口(在这种情况下为java.util.List),而不是实现。

BalusC answered 2019-05-19T10:43:30Z

17 votes

这样做并不安全!

想象一下,如果你有:

ArrayList list = new ArrayList();

list.add(new Employee("Jonh"));

list.add(new Car("BMW","M3"));

list.add(new Chocolate("Twix"));

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

athspk answered 2019-05-19T10:44:12Z

13 votes

如果你想以肮脏的方式去做,试试这个。

@SuppressWarnings("unchecked")

public ArrayList convert(ArrayList a) {

return (ArrayList) a;

}

优点:在这里您可以通过不迭代所有对象来节省时间。

缺点:可能会在你的脚上产生一个洞。

Per Lindberg answered 2019-05-19T10:44:54Z

12 votes

使用番石榴:

List stringList=Lists.transform(list,new Function(){

@Override

public String apply(Object arg0) {

if(arg0!=null)

return arg0.toString();

else

return "null";

}

});

Emil answered 2019-05-19T10:45:20Z

7 votes

使用Java 8,您可以:

List list = ...;

List strList = list.stream()

.map( Object::toString )

.collect( Collectors.toList() );

Scadge answered 2019-05-19T10:45:44Z

7 votes

您可以使用通配符执行以下操作

ArrayList strList = (ArrayList)(ArrayList>)(list);

hellrocker answered 2019-05-19T10:46:09Z

6 votes

这是使用番石榴的另一种选择

List lst ...

List ls = Lists.transform(lst, Functions.toStringFunction());

husayt answered 2019-05-19T10:46:33Z

5 votes

您的代码ArrayList list2 = (String)list;无法编译,因为list2的类型不是String.但这不是唯一的问题。

fastcodejava answered 2019-05-19T10:46:59Z

0 votes

使用Java 8 lambda:

ArrayList obj = new ArrayList<>();

obj.add(1);

obj.add("Java");

obj.add(3.14);

ArrayList list = new ArrayList<>();

obj.forEach((xx) -> list.add(String.valueOf(xx)));

Ankush soni answered 2019-05-19T10:47:26Z

0 votes

使用Java Generics获取X列表并返回扩展或实现X的T列表,Sweet!

// the cast is is actually checked via the method API

@SuppressWarnings("unchecked")

public static ArrayList convertToClazz(ArrayList from, Class inClazz, Class outClazz) {

ArrayList to = new ArrayList();

for (X data : from) {

to.add((T) data);

}

return to;

}

Just Me answered 2019-05-19T10:47:51Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值