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