【问题标题】:Which java collection to use to compare 2 datasets? [duplicate]使用哪个 java 集合来比较 2 个数据集? [复制]
【发布时间】:2014-04-30 14:57:04
【问题描述】:

我有 2 个月的 2 个数据集,包含公司名称、收入和费用。
对于每家公司,我需要提供 4 月份的收入和支出详细信息以及上个月收入和支出的百分比变化。分数。

我可以使用哪个 java 集合来比较这两个数据集?

示例数据集:

Month   Company_Name       Income   Expense
April        A             100         100
April        B             200         200
April        C             300         300
April        D             400         400
April        E             500         500


Month   Company_Name    Income     Expense
March        A              50       50
March        B              100     100
March        C              200     200
March        D              300     300
March        G              600     600

输出应该是这样的

(Company Name: A, April Income: 100, April Expense: 100  percent Income change with previous month : 100)
(Company Name: B, April Income: 200, April Expense: 200  percent Income change with previous month : 100)
(Company Name: C, April Income: 300, April Expense: 300  percent Income change with previous month : 100)
(Company Name: D, April Income: 400, April Expense: 400  percent Income change with previous month : 100)
(Company Name: E, April Income: 500, April Expense: 500  percent Income change with previous month : N/A)
(Company Name: G, April Income: N/A, April Expense: N/A  percent Income change with previous month : N/A)

这是我尝试失败的原因?

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

public class a {
    public static void main(String[] args) {
        HashMap<String, ArrayList<Integer>> marchMap=new HashMap<String, ArrayList<Integer>>();
        HashMap<String, ArrayList<Integer>> aprilMap=new HashMap<String, ArrayList<Integer>>();
        ArrayList<Integer> revenueDetails=new ArrayList<Integer>();     

        // company A's march income and expense details
        revenueDetails.add(100); //income
        revenueDetails.add(100); //expense
        marchMap.put("A", revenueDetails); 

        // company B's march income and expense details
        revenueDetails.add(200); //income
        revenueDetails.add(200); //expense
        marchMap.put("B", revenueDetails); 

        // company A's april income and expense details
        revenueDetails.add(200); //income
        revenueDetails.add(200); //expense
        aprilMap.put("A", revenueDetails); 

        // company B's april income and expense details
        revenueDetails.add(300); //income
        revenueDetails.add(300); //expense
        aprilMap.put("B", revenueDetails); 

        // doesnt seem to be working. prints: A, 100, 100     B,100,100
        for (Entry<String, ArrayList<Integer>> entry : aprilMap.entrySet()) {
            System.out.println("Company Name " + entry.getKey() + ": " + "   Income: " + entry.getValue().get(0) +  "   Expense: " + entry.getValue().get(1));
        }       
    }
}

【问题讨论】:

  • 你会尝试一些东西。请向我们展示您的代码。
  • 这不是和你上一个问题一样吗? stackoverflow.com/questions/23376057/…
  • 这个问题的前一个化身的答案似乎暗示了一条非常清晰的前进道路。您尝试过这种方法吗?
  • 将我不成功的代码添加到原帖中。

标签: java collections hashmap


【解决方案1】:

只需为要存储在地图中的值创建自己的类。

public class Main {

    public static void main(String[] args) {
        Map<String, IncomeExpense) march = new HashMap<>();
        march.add(new IncomeExpense("March",100,100);
        ...
    }


    private static class IncomeExpense{
        private String month;
        private int income;
        private int expense;

        public IncomeExpense(String month, int income, int expense) {
            this.income = income;
            this.expense = expense;
        }


        public String toText() {
            return month + " Income: " + income + ", " + month + " Expense: " + expense;
        }
    }
}

【讨论】:

    【解决方案2】:

    您没有重新初始化 ArrayList。所有条目都是不同的ArrayList。因此,在为每个月添加每个公司条目后,您必须创建一个新的 ArrayList,如下所示,

          revenueDetails=new ArrayList<Integer>();
    

    并且代码必须像下面的sn-p,

        ArrayList<Integer> revenueDetails=new ArrayList<Integer>();     
        // company A's march income and expense details
        revenueDetails.add(100); //income
        revenueDetails.add(100); //expense
        marchMap.put("A", revenueDetails); 
    
        // company B's march income and expense details
        revenueDetails=new ArrayList<Integer>();
    
        revenueDetails.add(200); //income
        revenueDetails.add(200); //expense
        marchMap.put("B", revenueDetails);
    
     // company A's april income and expense details
        revenueDetails=new ArrayList<Integer>();
    
        revenueDetails.add(200); //income
        revenueDetails.add(200); //expense
        aprilMap.put("A", revenueDetails);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      • 2013-01-23
      • 1970-01-01
      • 2014-06-16
      • 2018-04-01
      • 1970-01-01
      相关资源
      最近更新 更多