将项目聚合到超级列表中的更有效方法 Java

More efficient method of aggregating items into super list Java

我正在寻找一种更有效的方法来完成以下代码在 java 8 之前的结果(这是在 Google App Engine 上托管的应用程序上,该应用程序尚不支持 Java 8)

 List<Order> orders = getOrders();
 List<LineItem> lineItems = new ArrayList<>();

 for (final Order order : orders) {
     for (final LineItem lineItem : order.getItems()) {
        lineItems.add(lineItem);
     }
 }

是否有更有效的方法可以在不需要使用 Java 8 功能的情况下完成此操作?可能使用 Guava

 List<Order> orders = getOrders();
 List<LineItem> lineItems = new ArrayList<>();

 for (final Order order : orders) {
     lineItems.addAll(order.getItems());
 }

您可以通过避免 ArrayList 达到支持数组大小时所需的调整大小操作来提高效率,这是通过在插入之前计算所需的大小来实现的。

int size = 0;
for (Order order : orders) {
 size += order.getItems().size();
}
List<LineItem> lineItems = new ArrayList<>(size);

for (Order order : orders) {
   lineItems.addAll(order.getItems());
}

虽然这会扫描 orders 两次,但如果 getItems 很大并且在调整大小期间需要多次复制支持数组,它可以执行得更好。