Dúvida em lógica

Galera estou quebrando a cabeça há dias pra resolver isso kkk.Estou gerando gráficos Excel com Java.O meu problema está na hora de gravar os dados nas colunas corretas para gerar um gráfico total.Por exemplo: tenho um select que trás a quantidade de batatas por mês:

image

Outro select que trás a quantidade de tomates:
image

E outro select que trás o total:
image

Agora se vocês perceberem o valores trazidos para gerar o gráfico(Total) estão sendo gravados da esquerda para direita.Como eu posso fazer para verificar os meses e gravar os valores nas posições corretas,sendo que os selects estão sendo gravados em sequência?

Este é o trecho de código que faço a gravação dos valores:

Row row;
Cell cell = null;

row=camada2.createRow(0);
row.createCell(0);
i=1;
while(rsTot.next()){
    row.createCell(i).setCellValue(rsTot.getString("mes"));
    i++;
}
row =camada2.createRow(1); //batatas
row.createCell(0).setCellValue("Batatas");
int i=1;
rsTot.beforeFirst();
while(rsBat.next()){
    row.createCell(i).setCellValue(rsBat.getInt("qtd"));
    i++;
}

row =camada2.createRow(1); //tomates
row.createCell(0).setCellValue("Tomates");
int i=1; 
while(rsTom.next()){
    row.createCell(i).setCellValue(rsTom.getInt("qtd"));
    i++;
}


row =camada2.createRow(2);
row.createCell(0).setCellValue("Total"); //total
int i=1;
while(rsTot.next()){
    row.createCell(i).setCellValue(rsTot.getInt("qtd"));
    i++;
}

Eu faria mais ou menos assim:

class Produto {
  String nome;
  LinkedHashMap<String, Integer> qtdsPorMes;
}

public void preencherProduto(Produto p, ResultSet rs) {
  List<String> meses = new LinkedList();
  while(rs.next()){
    meses.add(rs.getString("mes")));
  }
  rs.beforeFirst();
  while(rs.next()){
    p.qtdsPorMes.put(meses.remove(0), rs.getInt("qtd"));
  }
}

public void criarLinha(camada, indice, p, List<String> meses /* vem do total */) {
  Row row = camada.createRow(indice);
  row.createCell(0).setCellValue(p.nome);
  int i = 1;
  for (mes : meses) {
    qtd = p.qtdsPorMes.getOrDefault(mes, 0);
    row.createCell(i).setCellValue(qtd);
    i++;
  }
}
1 curtida

Você está seguindo um caminho “mais fácil”.
Você tem a opção de seguir conforme o @diego12 sugeriu, com um linkedhashmap ou, então, colocar como 0 a quantidade para os meses onde não há valores definidos.

Muito obrigado cara era exatamente isso que tava querendo! Testei aqui e funcionou perfeitamente!