![](/img/trans.png)
[英]How can I convert ArrayList<Object> to ArrayList<String> or ArrayList<Timestamp>?
[英]How can I convert ArrayList<Object> to 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;
但它給了我一個編譯錯誤。
由於這實際上不是字符串列表,因此最簡單的方法是遍歷它並將每個項目自己轉換為新的字符串列表:
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
)而不是實現進行聲明。
這樣做是不安全的!
想象一下,如果你有:
ArrayList<Object> list = new ArrayList<Object>();
list.add(new Employee("Jonh"));
list.add(new Car("BMW","M3"));
list.add(new Chocolate("Twix"));
將這些對象的列表轉換為任何類型是沒有意義的。
使用 Java 8,您可以執行以下操作:
List<Object> list = ...;
List<String> strList = list.stream()
.map( Object::toString )
.collect( Collectors.toList() );
您可以使用通配符執行以下操作
ArrayList<String> strList = (ArrayList<String>)(ArrayList<?>)(list);
如果你想用骯臟的方式來做,試試這個。
@SuppressWarnings("unchecked")
public ArrayList<String> convert(ArrayList<Object> a) {
return (ArrayList) a;
}
優點:在這里您可以通過不迭代所有對象來節省時間。
缺點:可能會在你的腳上產生一個洞。
使用番石榴:
List<String> stringList=Lists.transform(list,new Function<Object,String>(){
@Override
public String apply(Object arg0) {
if(arg0!=null)
return arg0.toString();
else
return "null";
}
});
這是使用番石榴的另一種選擇
List<Object> lst ...
List<String> ls = Lists.transform(lst, Functions.toStringFunction());
您的代碼ArrayList<String> list2 = (String)list;
無法編譯,因為list2
不是String
類型。 但這並不是唯一的問題。
使用 Java 8 lambda:
ArrayList<Object> obj = new ArrayList<>();
obj.add(1);
obj.add("Java");
obj.add(3.14);
ArrayList<String> list = new ArrayList<>();
obj.forEach((xx) -> list.add(String.valueOf(xx)));
使用 Java 泛型 獲取 X 列表並返回擴展或實現 X 的 T 列表,太好了!
// the cast is is actually checked via the method API
@SuppressWarnings("unchecked")
public static <T extends X, X> ArrayList<T> convertToClazz(ArrayList<X> from, Class<X> inClazz, Class<T> outClazz) {
ArrayList<T> to = new ArrayList<T>();
for (X data : from) {
to.add((T) data);
}
return to;
}
一個簡單的解決方案:
List<Object> lst =listOfTypeObject;
ArrayList<String> aryLst = new ArrayList<String>();
for (int i = 0; i < lst.size(); i++) {
aryLst.add(lst.get(i).toString());
}
注意:當列表包含數據類型字符串的所有元素時,這有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.