Java中集合與陣列互轉總結

小飛鶴發表於2017-09-27

1.集合之間,以及集合與陣列互轉

1.List轉換為Array

List<String> list = new ArrayList<String>();
list.add(“1”);
list.add(“2”);
list.add(“3”);
list.add(“4”);
String [] countries = list.toArray(new String[list.size()]);
2.Array轉換為List
String[] countries = {“1”, “2”, “3”, “4”};
List list = Arrays.asList(countries);
3.Map轉換為List
List<Value> list = new ArrayList<Value>(map.values());
4.Array轉換為Set
String [] countries = {“1”, “2”, “3”};      
Set<String> set = new HashSet<String>(Arrays.asList(countries));
System.out.println(set);
5.Map轉換為Set
Map<Integer, String> sourceMap = createMap();
Set<String> targetSet = new HashSet<>(sourceMap.values());

特別說明:

  • 採用集合的toArray()方法直接把List集合轉換成陣列,這裡需要注意,不能這樣寫: 
    String[] array = (String[]) mlist.toArray(); 
    這樣寫的話,編譯執行時會報型別無法轉換java.lang.ClassCastException的錯誤,這是為何呢,這樣寫看起來沒有問題啊 
    因為java中的強制型別轉換是針對單個物件才有效果的,而List是多物件的集合,所以將整個List強制轉換是不行的 
    正確的寫法應該是這樣的 
    String[] array = mlist.toArray(new String[0]);
    List<String> mlist = new ArrayList<>();
    mlist.add("zhu");
    mlist.add("wen");
    mlist.add("tao");
    // List轉成陣列
    String[] array = mlist.toArray(new String[0]);
    // 輸出陣列
    for (int i = 0; i < array.length; i++) {
        System.out.println("array--> " + array[i]);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11


2.List<T>轉List<String>最佳方法

使用Google的Lists工具類

eg:

    List<Integer>轉List<String>

import com.google.common.collect.Lists;
import com.google.common.base.Functions

List<Integer> integers = Arrays.asList(1, 2, 3, 4);

List<String> strings = Lists.transform(integers, Functions.toStringFunction());









相關文章