Oi João. Eu consegui o que eu queria usando o comando "ORDER BY". Daí o meu código ficou o seguinte:
package br.com.alura.jdbc.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import br.com.alura.jdbc.modelo.Categoria;
import br.com.alura.jdbc.modelo.Produto;
public class CategoriaDAO {
private Connection connection;
public CategoriaDAO(Connection connection) {
this.connection = connection;
}
public List<Categoria> listar() throws SQLException {
List<Categoria> categorias = new ArrayList<>();
String sql = "SELECT id, nome FROM CATEGORIA";
try (PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.execute();
try (ResultSet rst = pstm.getResultSet()) {
while (rst.next()) {
Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
categorias.add(categoria);
}
}
}
return categorias;
}
public List<Categoria> listarComProdutos() throws SQLException {
Categoria ultima = null;
List<Categoria> categorias = new ArrayList<>();
String sql = "SELECT C.id, C.nome, P.id, P.nome, P.descricao FROM CATEGORIA C INNER JOIN"
+ " PRODUTO P ON C.id = P.Categoria_Id"
+ " ORDER BY P.Categoria_Id";
try (PreparedStatement pstm = connection.prepareStatement(sql)) {
pstm.execute();
try (ResultSet rst = pstm.getResultSet()) {
while (rst.next()) {
if (ultima == null || !ultima.getNome().equals(rst.getString(2))) {
Categoria categoria = new Categoria(rst.getInt(1), rst.getString(2));
ultima = categoria;
categorias.add(categoria);
}
Produto produto = new Produto(rst.getInt(3), rst.getString(4), rst.getString(5));
ultima.adicionar(produto);
}
}
}
return categorias;
}
}