首页 > 解决方案 > 使用 Map 获取具有相同字符串名称的 ArrayList 内的整数总和

问题描述

我有一个带有一个字符串值和两个整数值的 ArrayList。我想要相同字符串值下的整数总和。例如

所以最终名单应该是

我能够使用一个字符串和一个整数得到总和。

这是我用于一个字符串和一个整数的。

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("")) {

    }
}

标签: androiddictionaryarraylist

解决方案


如果我正确理解了您的目标,那么您根本不需要 ArrayLists。

你有没有尝试过这样的事情?

Map<String, QuantityData> sumMap = new TreeMap<String, QuantityData>();
QuantityData qtyData;
for (ItemData dashboardOneData : invoiceList) {
    String key = dashboardOneData.getInvoiceNo() + "#" + dashboardOneData.getInvoiceDate();
    if (sumMap.containsKey(key)) {
        qtyData = sumMap.get(key)
        qtyData.setOriQty(qtyData.getOriQty() + dashboardOneData.getMatQty());
        qtyData.setNewQty(qtyData.getNewQty() + dashboardOneData.getNewQty());
    } else {
        qtyData = new QuantityData();
        qtyData.setOriQty(dashboardOneData.getMatQty());
        qtyData.setNewQty(dashboardOneData.getNewMatQty());
    }
    sumMap.put(key, qtyData);
}

推荐阅读