본문 바로가기
Java, JSP

Java에서 서로 다른 두 List 간 Join 방법

by 수앙 2017. 5. 18.

디비 테이블 조인을 지양할 때 어쩔 수 없이 자바에서 조인을 해줘야 하는 상황이 발생할 경우

해결방안

아래 예제는 inner join만 사용

 

1. 아래 사이트 맨 하단에 메이븐을 내 프로젝트에 등록 및 아래 사이트 가이드 참고

글 쓰는 시점에서의 버전은 0.9.12

https://github.com/jOOQ/jOOL

<dependency>
    <groupId>org.jooq</groupId>
    <artifactId>jool</artifactId>
    <version>0.9.12</version>
</dependency>

 

2. 각 테이블 목록을 조회 후 inner join 수행

import static org.jooq.lambda.tuple.Tuple.tuple; // 중요
...
@Service

public class UserService {

    @Autowired
    private CommonDao commonDao;

    public List<User> getUsers() {
        List<User> userList = commonDao.selectList("UserDao.getUser");
        List<UserRole> userRoleList = commonDao.selectList("UserRoleDao.getUserRole");

        // 여기서 join
        return userList.stream()
            .flatMap(v1 -> userRoleList.stream().map(v2 -> tuple(v1, v2)))
            .filter(t -> t.v1.getUserId().equals(t.v2.getUserId())) // join 조건
            .map(t -> t.v1) // t.v1 = userList, t.v2 = userRoleList
            .distinct() // 중복 제거
            .collect(Collectors.toList());
    }

}

 

3. 다양한 예제가 있는 참고사이트

https://blog.jooq.org/2015/08/13/common-sql-clauses-and-their-equivalents-in-java-8-streams/

 

끝.

댓글