我想连接两个数组列表,如the answer中所示:
final List<String> l1 = Lists.newArrayList(...);
final List<String> l2 = Lists.newArrayList(...);
List<String> l = new ArrayList<String>() { { addAll(l1); addAll(l2); } };
有没有非风格的原因我不应该这样使用它?
答案 0 :(得分:2)
如果您已经在使用Guava,可以使用以下单行代码执行此操作:
List<String> l = FluentIterable.from(l1).append(l2).copyInto(new ArrayList<String>());
我个人不喜欢双括号。这产生新类只是为了以不同的方式初始化它。新类意味着更大的目标jar文件,JVM存储类需要更多内存,JIT编译器需要更大的继承表等。如果你在任何地方使用这种方法,这可能会变得很重要。如果将此ArrayList
返回到另一个组件并且不再使用当前组件(例如,您正在使用OSGi或其他模块系统),则可能最终挂起ClassLoader
,该链接仅由这个匿名课程。此外,如果您关心序列化,则应在此新类中声明serialVersionID
。即使您不在乎,也可能会对此发出警告。
答案 1 :(得分:1)
嗯,首先,它取决于您希望如何处理重复元素。此代码将保留任何重复项(即l1
和l2
都包含"someString"
,l
将包含两个"someString"
),因此它不是真正的联合操作。将其称为两个列表的串联将更准确。
除此之外,使用“双括号”实际上是创建一个扩展ArrayList的匿名类的实例。我认为这是一种糟糕的代码风格。
List<String> l = new ArrayList<String>(l1);
l.addAll(l2);
更清晰,不再写。