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