More efficient method of aggregating items into super list Java

放肆的年华 提交于 2020-01-15 10:19:06

问题


I am looking for a more efficient way of accomplishing the result of the following code pre java 8 (this is on an app hosted on Google App Engine which does not yet support 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);
     }
 }

Is there a more efficient means of accomplishing this without needing to use Java 8 functionality? Possibly using Guava


回答1:


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

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



回答2:


You can make it more efficient by avoiding the resize operation required by ArrayList when it hits the backing array size, and that's by calculating the size required before inserting.

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());
}

Although this would scan orders twice, it can perform better if getItems are big and the backing-array need to be copied several times during resize.



来源:https://stackoverflow.com/questions/46921264/more-efficient-method-of-aggregating-items-into-super-list-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!