java - 在android中减去2个不同列表中的值

标签 java android arrays

我有一个年份整数数组及其相应的值,它看起来像下面的代码

int[] earningYear = {2012,2013,2014};
int[] earningAmount = {100,150,120};
int[] expenseYear = {2012,2014};
int[] expenseAmount = {50,30};

我想从与年份对应的收入金额中减去费用金额,输出列表应如下所示

int[] savingsYear = {2012,2013,2014};
int[] savingsamount = {50,150,90};

请帮我做这件事。提前致谢

最佳答案

@umair.ali 和 @Casper 给出的答案很好,将数组转换为 map 是正确的方法。
我建议使用 TreeMap (或 SortMap 接口(interface)的其他实现)。 TreeMap 默认按升序对其键进行排序。这样,如果您确实想要得到简单的储蓄数组作为结果,则在处理后就不必进行任何尴尬的 map 排序。

这是完整的示例:

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class SavingsApp {

    public Map<Integer, Integer> arraysToMap(int[] years, int[] money) {
        Map<Integer, Integer> newMap = new HashMap<Integer, Integer>();
        if (years == null || money == null || years.length != money.length) {
            throw new IllegalArgumentException();
        }
        for (int i=0; i< years.length; i++ ) {
            newMap.put(years[i], money[i]);
        }

        return newMap;
    }

    public Map<Integer, Integer> calculateSavings(Map<Integer, Integer> earningsMap, Map<Integer, Integer>expensesMap) {
        Map<Integer, Integer> savingsMap = new TreeMap<Integer, Integer>();
        savingsMap.putAll(earningsMap);

        for (Entry<Integer, Integer> expensePerYear : expensesMap.entrySet()) {
            Integer year = expensePerYear.getKey();
            Integer expense = expensePerYear.getValue();

            Integer earning = savingsMap.get(year);
            if (earning == null) {
                earning = 0;
            }
            savingsMap.put(year, earning-expense);
        }
        return savingsMap;
    }


    public static void main(String[] args) {
        int[] earningYear = {2012,2013,2014};
        int[] earningAmount = {100,150,120};
        int[] expenseYear = {2012,2014};
        int[] expenseAmount = {50,30};

        SavingsApp app = new SavingsApp();

        // convert arrays to maps
        Map<Integer, Integer> earningsMap = app.arraysToMap(earningYear, earningAmount);
        Map<Integer, Integer> expensesMap = app.arraysToMap(expenseYear, expenseAmount);

        // compute savings per year
        Map<Integer, Integer> savingsMap = app.calculateSavings(earningsMap, expensesMap);

        // convert result map to array
        List<Integer> savingsList = new ArrayList<Integer>(savingsMap.values());
        Integer[] savingsArray = new Integer[savingsList.size()];
        savingsList.toArray(savingsArray);
    }
}

需要注意的一件事是, savingsArray 将是 Integer[] 类型,而不是 int[]

关于java - 在android中减去2个不同列表中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15808259/

相关文章:

arrays - Ruby 数组搜索方法未按预期工作

java - antlr:我可以让生成的 java 文件扩展现有类吗

java - 带有 json 和图像处理的 asyctask

java - 多个线程不能同时进入同步块(synchronized block)吗?

android - 降低Android中的音频播放速度

android - 电晕函数和变量

java - 我是否需要同时同步方法和对象

android - 延长 Android 应用程序证书过期

php - 为 findBy 学说存储库函数返回具有特定键的关联数组

javascript - 在javascript中解析Json并获取键/值的最佳方法