У меня есть ArrayList с одним строковым значением и двумя целочисленными значениями.Я хочу, чтобы сумма целых чисел под тем же значением String.Например,
aaa , 1 , 2
aaa , 2 , 1
bbb , 1 , 2
ccc , 3 , 3
ccc , 1 , 2
ccc , 2 , 2
Таким образом, окончательный список должен иметь вид
aaa , 3, 3
bbb , 1, 2
ccc , 6, 7
Мне удалось получить сумму, используя одну строку и одно целое число.
это то, что я использовал для одной строки и одного целого числа.
ArrayList<InvoiceData> invoiceHeaderList = new ArrayList<>();
invoiceHeaderList.clear();
Map<String, Integer> sumMap = new TreeMap<String, Integer>();
for (ItemData dashboardOneData : invoiceList) {
String key = dashboardOneData.getInvoiceNo() + "#" + dashboardOneData.getInvoiceDate();
if (sumMap.containsKey(key)) {
int sum = sumMap.get(key);
sum += dashboardOneData.getMatQty();
sumMap.put(key, sum);
} else {
sumMap.put(key, dashboardOneData.getMatQty());
}
}
for (Map.Entry<String, Integer> e : sumMap.entrySet()) {
String[] splitInvoice;
InvoiceData invTempData = new InvoiceData();
if (e.getKey() != null || !e.getKey().equals("")) {
splitInvoice = e.getKey().split("#+");
invTempData.setInvoiceNo(splitInvoice[0]);
invTempData.setInvoiceDate(splitInvoice[1]);
invTempData.setInvoiceQty(e.getValue());
invoiceHeaderList.add(invTempData);
}
}
Я попытался сделать, как показано ниже, но не повезло, я не смог взять сумму двух целых чисел внутри метода.
public class QuantityData {
private int oriQty;
private int newQty;
public QuantityData() {
}
}
Метод ....
ArrayList<InvoiceData> invoiceHeaderList = new ArrayList<>();
invoiceHeaderList.clear();
Map<String, List<QuantityData>> sumMap = new TreeMap<String, List<QuantityData>>();
for (ItemData dashboardOneData : invoiceList) {
String key = dashboardOneData.getInvoiceNo() + "#" + dashboardOneData.getInvoiceDate();
QuantityData qtyData = new QuantityData();
if (sumMap.containsKey(key)) {
ArrayList<QuantityData> qtyArrayList = new ArrayList<>();
qtyArrayList.add(qtyData);
sumMap.put(key, qtyArrayList);
} else {
ArrayList<QuantityData> qtyArrayList = new ArrayList<>();
qtyData.setOriQty(dashboardOneData.getMatQty());
qtyData.setNewQty(dashboardOneData.getNewMatQty());
qtyArrayList.add(qtyData);
sumMap.put(key, qtyArrayList);
}
}
for (Map.Entry<String, List<QuantityData>> e : sumMap.entrySet()) {
String[] splitInvoice;
InvoiceData invTempData = new InvoiceData();
if (e.getKey() != null || !e.getKey().equals("")) {
}
}