2014-12-22 31 views
1

對象是否有在Java中的任何實用功能轉換List<Object[]>List<Object>轉換列表列出在Java中

+3

描述你的問題正確 –

+0

的問題是AMB含糊不清:如果一個數組包含兩個或多個元素會發生什麼?請舉一個例子。 –

+0

作爲該功能的結果,您會期待什麼? –

回答

2

你可以自己隨便寫一個:

public static<T> List<T> append (List<T[]> input) { 
    List<T> res = new ArrayList<T>(); 
    for(T[] subarr : input) { 
     if(subarr != null) { 
      int n = subarr.length; 
      for(int i = 0; i < n; i++) { 
       res.add(subarr[i]); 
      } 
     } 
    } 
    return res; 
} 

功能追加不同的陣列和陣列null忽略,null元素然而沒有。因此如果輸入是[null,[a,b],[null,null],[c,null,d],null]。輸出是[a,b,null,null,c,null,d]

+3

'新清單()'?從什麼時候你可以實例化一個接口?但除此之外,我喜歡你正在檢查null。 – Tom

+0

@Tom:對,修改它。在C#中,'List '是一個類:(有時候開始混合std-libs ...:s –

+1

爲什麼要允許空數組?空數組看起來很可能表示程序中的一個bug ...? –

1

你爲什麼不只是寫自己的功能?這可能比問這個問題並等待答案要快。

2

不,沒有辦法直接爲你做這個。你可以寫一個嵌套的循環或使用流API的flatMap如下:

List<Object> flat = objArrs.stream() 
          .flatMap(Stream::of) 
          .collect(Collectors.toList()); 
1

在Java 8,你可以用流做到這一點:

List<Object[]> list = ... 
List<Object> l = list.stream() 
        .flatMap(arr -> Stream.of(arr)) 
        .collect(Collectors.toList()); 
1

正如其他人已經說過,有沒有效用和使用老同學 for循環自己創建一個並不難,例如:

public List<Object> flatten(List<Object[]> source) 
{ 
    // if (source == null) return null; // which check you use it up to you 
    List<Object> result = new ArrayList<Object>(); 
    if (source == null) return result; // Personally I like this check 

    for (Object[] array: source) 
    { 
     if (array == null) continue; // skip nulls 
     for (Object object: array) 
     { 
      result.add(object); 
     } 
    } 
    return result; 
} 
+0

也許你可以把它變成它的通用對象(提升)...... –