java中的N列表联盟

时间:2014-03-06 16:50:44

标签: java collections

在java中创建N个列表的联合的最佳方法是什么?

例如

List<Integer> LIST_1 = Lists.newArrayList(1);

List<Integer> LIST_2 = Lists.newArrayList(2);

List<Integer> LIST_3 = Lists.newArrayList(3);

List<Integer> LIST_4 = Lists.newArrayList(4);

List<Integer> LIST_1_2_3_4 = Lists.newArrayList(1,2,3,4);

assert LIST_1_2_3_4.equals(union(LIST_1,LIST_2,LIST_3,LIST_4)); 

The union method will take a var args parameter

<Item> List<Item> union(List<Item> ... itemLists)

是否有提供此方法的库。最简单的方法是遍历数组并将每个列表累积为一个

3 个答案:

答案 0 :(得分:6)

可能有一个库,但只包含这3行代码可能不值得另外依赖...

private static <Item> List<Item> union(List<Item> ... itemLists)
{
    List<Item> result = new ArrayList<Item>();
    for (List<Item> list : itemLists) result.addAll(list);
    return result;
}

答案 1 :(得分:4)

您可以使用Google Guava

List<Integer> joined = new ArrayList<>( Iterables.concat(LIST_1, LIST_2, LIST_3, LIST_4) );

或仅供比较:

Iterables.elementsEqual( LIST_1_2_3_4, Iterables.concat(LIST_1, LIST_2, LIST_3, LIST_4) );

答案 2 :(得分:1)

我不确定最佳解决方案的含义,但简单的解决方案将涉及使用addAll方法。

为了获得额外的性能,您还可以通过对所有尺寸求和来暗示尺寸。

new ArrayList<...>(totalSizeHere)

另请参阅此答案:How to do union, intersect, difference and reverse data in java