Tranformar um registro(tupla) em objetos

Olá,

Tenho uma dúvida da melhor forma de fazer, alguém tem alguma sugestão? é o seguinte…

Imagine que eu, de um select, pegue as seguintes tuplas

PAIS  ---- ESTADO ---- CIDADE ----- RUA
 1   ----     1  ----     1  ----    1 
 1   ----     1  ----     1  ----    2
 1   ----     1  ----     2   ----  NULL
 2   ----     5  ----    NULL ----  NULL

A partir desses registros eu vou popular os objetos Pais, Estado, Cidade, Rua
para futuramente saber, por exemplo, todas as ruas de uma cidade ou todas as ruas de um estado; ou todas as cidades de um país…etc

No código acima os objetos seriam populados da seguinte forma

Pais(1) -> Estado(1) -> Cidade(1) -> Rua(1,2)
Pais(1) -> Estado(1) -> Cidade(2)
Pais(2) -> Estado(5)

Um trecho da classe país seria mais ou menos assim

public class Pais{
       private Integer idPais;
       private List<Estado> estados;
       :
       :
}

Minha dúvida seria se alguém tem uma forma fácil de fazer, que exija poucos recuros computacionais…
eu até elaborei um algorítimo usando HashSet, mas para transoformar as tuplas em objetos e depois para percorrê-los exige uma quantidade grande de laços

Alguma sugestão?