在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)
是否有提供此方法的库。最简单的方法是遍历数组并将每个列表累积为一个
答案 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