地图 - 具有多个值的单键
Map - Single key with multiple values
嗯,我有一个名为 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);
}
你要的是多图。有几个库提供了它们,但我自己更喜欢 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);
您的问题是您在 for
循环的每个 迭代 中重新创建 ArrayList<ItensDespesaOrcamentoParcelas>
,以及重新插入新列表进入地图。您需要在第一次看到特定键时创建列表,然后然后将项目添加到列表中。
因此最终结果将如下所示:
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);
}
嗯,我有一个名为 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);
}
你要的是多图。有几个库提供了它们,但我自己更喜欢 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);
您的问题是您在 for
循环的每个 迭代 中重新创建 ArrayList<ItensDespesaOrcamentoParcelas>
,以及重新插入新列表进入地图。您需要在第一次看到特定键时创建列表,然后然后将项目添加到列表中。
因此最终结果将如下所示:
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);
}