Today
-
Yesterday
-
Total
-
  • Java Stream을 이용한 Inner Join/Left Join 기능(펌)
    카테고리 없음 2020. 9. 12. 06:03

    https://helloino.tistory.com/61

     

    Java Stream을 이용한 Inner Join / Left Join 기능

    Java Stream을 이용한 Inner Join/Left Join 기능 - NoSQL Database를 사용하다보면 Join 기능이 없기 때문에 Application에서 Join 기능을 만들어야 된다. - Java Stream을 이용하여 손쉽게 inner join/left join..

    helloino.tistory.com

    - NoSQL Database를 사용하다보면 Join 기능이 없기 때문에 Application에서 Join 기능을 만들어야 된다.

    - Java Stream을 이용하여 손쉽게 inner join/left join을 할수 있게 구현을 할수 있다.

    - 저장되어 있는 DB가 서로 다른 경우에도 inner join/ left join 가능하다. ex) mysql에서 유저 정보를 가지고 와서 redis에 있는 주문 정보를 조회할수 있는 구조에서의 join 기능을 구현, batch job을 통한 데이터 추출 등..

    Data Class

    @Getter

    @AllArgsConstructor(staticName = "create")

    static class User {

        private Long userId;

    }

     

    @Getter

    @AllArgsConstructor(staticName = "create")

    static class Order {

        private Long userId;

        private Long orderId;

    }

     

    List<User> userList = Lists.newArrayList(User.create(1L), User.create(2L), User.create(2L));

    List<Order> orderList = Lists.newArrayList(Order.create(1L, 1L), Order.create(2L, 2L));

    Inner Join

    Map<Long, User> userIdMap = userList.stream()

            .collect(Collectors.toMap(User::getUserId, Function.identity()));

     

    List<Pair<Order, User,>> innerJoinList = orderList.stream()

            .filter(it -> userIdMap.containsKey(it.getUserId()))

            .map(it -> Pair.of(it, userIdMap.get(it.getUserId())))

            .collect(Collectors.toList());

    - 주문을 한 사용자 인경우

    - 주문 정보와 사용자 정보를 얻을수가 있다.

     

    Left Join

    Map<Long, Order> orderIdMap = orderList.stream()

            .collect(Collectors.toMap(Order::getUserId, Function.identity()));

     

    List<User> leftJoinUser = userList.stream()

            .filter(it -> !orderIdMap.containsKey(it.getUserId()))

            .collect(Collectors.toList());

    - 주문을 하지 않는 사용자 인경우

    댓글

Designed by Tistory.