我正在寻找一种更有效的方法来完成以下代码pre 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功能?可能使用番石榴
答案 0 :(得分:4)
List<Order> orders = getOrders();
List<LineItem> lineItems = new ArrayList<>();
for (final Order order : orders) {
lineItems.addAll(order.getItems());
}
答案 1 :(得分:0)
您可以通过避免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
很大并且在调整大小期间需要多次复制支持数组,它可以表现得更好。