본문 바로가기

Programming!

List<Order>의 Order 내 List<OrderItem>을 갖는 경우 OrderItem 기준으로 List 생성


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



근데 병렬로 하는게 빠르려나..쩝