好吧,我有一个名为listaParcelasGerarOrcamento的列表,它包含以下项目:
05/03/2015 Parcela 2/5 32.00
12/03/2015 Parcela 3/5 32.00
19/03/2015 Parcela 4/5 32.00
26/02/2015 Parcela 1/5 32.00
26/02/2015 Parcela 1/9 12.00
26/03/2015 Parcela 5/5 32.00
28/03/2015 Parcela 2/9 12.00
28/04/2015 Parcela 3/9 12.00
28/05/2015 Parcela 4/9 12.00
....
我需要将它们放在HashMap中,我使用日期作为键并尝试将另一方放入列表中并传递为值,但是在02.26.2015那天它只添加了第二项,而不是两者。
Map<String, List<ItensDespesaOrcamentoParcelas>> mapa = new HashMap<String, List<ItensDespesaOrcamentoParcelas>>();
for (int i = 0; i < listaParcelasGerarOrcamento.size(); i++) {
List<ItensDespesaOrcamentoParcelas> listaItens = new ArrayList<ItensDespesaOrcamentoParcelas>();
ItensDespesaOrcamentoParcelas itensParcela = new ItensDespesaOrcamentoParcelas();
itensParcela.setDataPagamento(listaParcelasGerarOrcamento.get(i)
.getDataPagamento());
itensParcela.setDescricaoParcela("Descricao "
+ listaParcelasGerarOrcamento.get(i).getDescricaoParcela());
itensParcela.setValorParcela(listaParcelasGerarOrcamento.get(i)
.getValorParcela());
listaItens.add(itensParcela);
mapa.put(listaParcelasGerarOrcamento.get(i).getDataPagamento(),
listaItens);
}
答案 0 :(得分:2)
你想要的是一个多图。有几个图书馆提供它们,但我自己更喜欢Guava。
如果你想模拟它,那么这一行
mapa.put(listaParcelasGerarOrcamento.get(i).getDataPagamento(),
listaItens);
需要改变这样的事情
String keya = listaParcelasGerarOrcamento.get(i).getDataPagamento();
List<ItensDespesaOrcamentoParcelas> lista = mapa.get(keya);
if (lista == null) {
lista = new ArrayList<ItensDespesaOrcamentoParcelas>();
mapa.put(keya, lista);
}
lista.addAll(listaItens);
答案 1 :(得分:1)
您的问题是,您要在ArrayList<ItensDespesaOrcamentoParcelas>
循环的每个迭代中重新创建for
,并将新列表重新插入地图。您需要在第一次看到特定密钥时创建列表,然后 将项目添加到列表中。
所以最终结果如下:
Map<String, List<ItensDespesaOrcamentoParcelas>> mapa = new HashMap<String, List<ItensDespesaOrcamentoParcelas>>();
for (int i = 0; i < listaParcelasGerarOrcamento.size(); i++) {
String key = listaParcelasGerarOrcamento.get(i).getDataPagamento();
ItensDespesaOrcamentoParcelas itensParcela = new ItensDespesaOrcamentoParcelas();
itensParcela.setDataPagamento(key);
itensParcela.setDescricaoParcela("Descricao " + listaParcelasGerarOrcamento.get(i).getDescricaoParcela());
itensParcela.setValorParcela(listaParcelasGerarOrcamento.get(i).getValorParcela());
if(mapa.get(key) == null)
mapa.put(key, new ArrayList<>());
mapa.get(key).add(itensParcela);
}