Problema com Map

Boa tarde, estou fazendo um relatório onde tenho que separar por centro de custo, dentro de centro de custo por conta, dentro de conta mostrar os lançamentos.

fiz o seguinte na action (estou utilizando struts).

Map<Integer, ReportRazaoCentroCustoItem> mapPai = new LinkedHashMap<Integer, ReportRazaoCentroCustoItem>();
    		for (Iterator iter = list.iterator(); iter.hasNext();) {
				AssociaCCusto associaCCusto = (AssociaCCusto) iter.next();
				ReportRazaoCentroCustoItem reportRazaoCentroCustoItem = mapPai.get(associaCCusto.getAssociaCCustoPK().getCdCentroCusto());
				if(reportRazaoCentroCustoItem==null){
					reportRazaoCentroCustoItem = new ReportRazaoCentroCustoItem();
					reportRazaoCentroCustoItem.setFilterLivroRazaoCCustoForm(filterForm);
					reportRazaoCentroCustoItem.setAssociaCCusto(associaCCusto);
					mapPai.put(associaCCusto.getAssociaCCustoPK().getCdCentroCusto(), reportRazaoCentroCustoItem);
				}
				ReportRazaoCentroCustoItem2 reportRazaoCentroCustoItem2 = reportRazaoCentroCustoItem.getItens().get(associaCCusto.getLancamento().getContaCreditada().getCdReduzido());
				if(reportRazaoCentroCustoItem2==null){
					reportRazaoCentroCustoItem2 = new ReportRazaoCentroCustoItem2();
					reportRazaoCentroCustoItem2.setConta(associaCCusto.getLancamento().getContaCreditada());
					reportRazaoCentroCustoItem.getItens().put(associaCCusto.getLancamento().getContaCreditada().getCdReduzido(), reportRazaoCentroCustoItem2);
				}
				reportRazaoCentroCustoItem2 = reportRazaoCentroCustoItem.getItens().get(associaCCusto.getLancamento().getContaDebitada().getCdReduzido());
				if(reportRazaoCentroCustoItem2==null){
					reportRazaoCentroCustoItem2 = new ReportRazaoCentroCustoItem2();
					reportRazaoCentroCustoItem2.setConta(associaCCusto.getLancamento().getContaDebitada());
					reportRazaoCentroCustoItem.getItens().put(associaCCusto.getLancamento().getContaDebitada().getCdReduzido(), reportRazaoCentroCustoItem2);
				}
				ReportRazaoCentroCustoSubItem razaoCentroCustoSubItem = reportRazaoCentroCustoItem2.getSubItens().get(associaCCusto.getLancamento().getLancamentoPK().getCdLancamento());
				if(razaoCentroCustoSubItem==null){
					razaoCentroCustoSubItem = new ReportRazaoCentroCustoSubItem();
					razaoCentroCustoSubItem.setLancamento(associaCCusto.getLancamento());
					reportRazaoCentroCustoItem2.getSubItens().put(associaCCusto.getLancamento().getLancamentoPK().getCdLancamento(),razaoCentroCustoSubItem);
				}
			}

no relatório

for (Iterator iterItem = map.values().iterator(); iterItem.hasNext();) {
				ReportRazaoCentroCustoItem reportRazaoCentroCustoItem = (ReportRazaoCentroCustoItem) iterItem.next();
....
for (Iterator iterItem2 = reportRazaoCentroCustoItem.getItens().values().iterator(); iterItem2.hasNext();) {
					
					ReportRazaoCentroCustoItem2 reportRazaoCentroCustoItem2 = (ReportRazaoCentroCustoItem2) iterItem2.next();

ReportRazaoCentroCustoSubItem subItemAnt = reportRazaoCentroCustoItem2.getSubItens().values().iterator().next();

for (Iterator iterSubItem = reportRazaoCentroCustoItem2.getSubItens().values().iterator(); iterSubItem.hasNext();) {
						ReportRazaoCentroCustoSubItem subItem = (ReportRazaoCentroCustoSubItem) iterSubItem.next();

no primeiro “for” ok, mas no segundo da o seguinte erro:

java.util.NoSuchElementException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:367)
at java.util.LinkedHashMap$ValueIterator.next(LinkedHashMap.java:380)
at br.com.ctb.reports.ReportLivroRazaoGerencial.generateDetail(ReportLivroRazaoGerencial.java:128)

que eh a linha do
ReportRazaoCentroCustoSubItem subItemAnt = reportRazaoCentroCustoItem2.getSubItens().values().iterator().next();

sei la o que estou fazendo de errado.
se alguem puder me dar uma luz.

[quote]public class NoSuchElementException
extends RuntimeException

Thrown by the nextElement method of an Enumeration to indicate that there are no more elements in the enumeration. [/quote]

Entenda a exception, e tente descobrir o erro no seu código, é em runtime, use o debug.

Alterei o nome das classes, mas debugando ele entra em todos os IFs

CentroCustoGerencial centroCusto = mapPai.get(keyCCusto);
				if(centroCusto==null){
					centroCusto = new CentroCustoGerencial();
					centroCusto.setCdCentroCusto(associaCCusto.getCentroCusto().getEmpreend().getCdEmpreendView());
					centroCusto.setNmCentroCusto(associaCCusto.getCentroCusto().getEmpreend().getNmEmpreend());
					mapPai.put(keyCCusto, centroCusto);
				}
				Integer keyCC = associaCCusto.getLancamento().getContaCreditada().getCdReduzido();
				ContaGerencial conta = centroCusto.getMapContas().get(keyCC);
				if(conta==null){
					conta = new ContaGerencial();
					conta.setConta(associaCCusto.getLancamento().getContaCreditada());
					centroCusto.getMapContas().put(keyCC, conta);
				}
				Integer keyCD = associaCCusto.getLancamento().getContaDebitada().getCdReduzido();
				conta = centroCusto.getMapContas().get(keyCD);
				if(conta==null){
					conta = new ContaGerencial();
					conta.setConta(associaCCusto.getLancamento().getContaDebitada());
					centroCusto.getMapContas().put(keyCD, conta);
				}
				Integer keyLanc = associaCCusto.getLancamento().getLancamentoPK().getCdLancamento();
				LancamentoGerencial lancamento = conta.getMapLancamentos().get(keyLanc);
				if(lancamento==null){
					lancamento = new LancamentoGerencial();
					conta.getMapLancamentos().put(keyLanc, lancamento);
				}

ao final quando especiono o centroCusto.getMapContas(),
o “values” esta null, mas o “table” contem os dados.