2014-12-22 34 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

也许你可以把它变成它的通用对象(提升)...... –