public class Order {
private Long id;
private List<OrderItem> orderItems;
}
List<Order> orders = ....
위와 같이 Order 에 대한 List를 있을 경우, OrderItem을 꺼내 새로운 List<OrderItem>를 만들고 싶을 경우가 있다.
해서 1차적으로
List<OrderItem> orderItems = new ArrayList<>();
for (orders...) {
for(o.getOrderItems()...) {
... orderItems.add(oi);
}
}
위와 같은 형태로 중복 for 문을 생각해볼 수도 있을 것이고. 이후,
List<OrderItem> orderItems = new ArrayList<>();
orders.stream().foreach(o->{
List<OrderItem> orderItems = o.getOrderItems().stream().map(..).collect(Collectors.toList())
orderItems.addAll(orderItemDtos);
});
이렇게 stream과 foreach를 이용해 어정쩡하게 할 수도 있겠지만.. 그냥 flatmap을 이용하는 방법이 가장 좋다.
List<OrderItem> orderItems = orders.stream().flatMap(o -> o.getOrderItems().stream()).collect(Collectors.toList());
근데 병렬로 하는게 빠르려나..쩝