【问题标题】:How can I get values from a hashMap dynamically - Java如何动态地从 hashMap 中获取值 - Java
【发布时间】:2021-10-08 13:45:29
【问题描述】:

我正在使用 HashMap,还没有太多经验。

我正在尝试编写一个 csvFile 来证明两个列表之间的比较。 如果比较的值相同ok,否则not ok

简单,但值“ok”或“not ok”需要自动更改,所以建议我使用 HashMap,我将比较字段的名称作为键,值将是它的状态(好或不好)。

到目前为止,返回值并写入文件,但状态不会自动填写。

这是我目前的代码,如果有人知道我该怎么做或有其他建议,请告诉我。

HashMap

public static Map<String, String> initMap(String status) {
         Map<String, String> mapFields = new HashMap<String, String>();
         
         mapFields.put("Book Ref", status);
         mapFields.put("Trade Date", status);
         mapFields.put("Start Date", status);
         mapFields.put("End Date", status);
         mapFields.put("Period Multiplier", status);
         mapFields.put("Notional", status);
         mapFields.put("Currency", status);
         mapFields.put("Rate", status);
         mapFields.put("Frequency Multiplier", status);
         mapFields.put("Day count", status);
         
        return mapFields;
 
    }

在同一个类中,我创建了这个方法来比较两个列表并定义它是否正常。

public static void compareValues(List<String> inputs, List<String> outputs, XrayFields fields, TradeData data, MKTWireIRS mkt) throws ParseException, InterruptedException {
        int y = 0;
        int x = 0;
        
        Map<String, String> map = new HashMap<String, String>();
    //   List<WriterCSV> writeCSV = new ArrayList<>();
         WriterCSV cv = new WriterCSV();
         
        try {
            for (String input : inputs) {   
                for (String out : outputs) {
                     cv = new WriterCSV();
                     map = new HashMap<String, String>();
                    if (y == x) {
                        if (input.equals(out)) {
                            System.out.println("ok: " + input + " = " + out);                       
                            String comment = "All fields checked are ok";
                            fields.setComment(comment);
                            fields.setStatus("PASS");
                            
                            cv.setOk("Ok");
                            map = initMap(cv.getOk());
                            
                        } else {
                            System.out.println("not ok: " + input + " = " + out);
                            fields.setStatus("FAIL");
                            String comment = "The value " + input + " is not the same as " + out;
                            fields.setComment(comment);
                            
                            cv.setOk("not Ok");
                            map = initMap(cv.getOk());

                        }
                    }
                    x = x + 1; // count of the list of output

                }
                
                y = y + 1; // count of the list of inputs
                x = 0; // reset to 0 the count of outputs
            }
            
            //create evidence of comparison
             cv.reportMKTWireToOutputIRS(data, mkt, map);
                        
        } catch (Error e) {
            System.out.println(e);
        }
    }

这是写csv的方法。

public void reportMKTWireToOutputIRS(TradeData data2, MKTWireIRS mkt, Map<String, String> map ) throws ParseException, InterruptedException {
        try {
            FileWriter fw = new FileWriter(new File(CSV_MKTWire + Setup.IRScsv));
            CSVWriter cw = new CSVWriter(fw);
            
            //format values
            String month = PropertyNames.deCapitalize(data2.getPeriod());
            String monthReset = PropertyNames.deCapitalize(data2.getResetFrequencyPeriod());
            String formatTradeDateMKT = Utils.formatDateToCompareMKTWire(data2.getTradeDateIRS());
            String formatStartDateMKT = Utils.formatDateToCompareMKTWire(data2.getStart_Date());
            String formatMAturityDateMKT = Utils.formatDateToCompareMKTWire(data2.getMaturity_Date());
            String rateActual = Utils.roundDecimal(data2.getRateIRS());
            String rateFormat = Utils.roundRateMKTwire(mkt.getRateIRS());
            String notionalFormat = data2.getNotional().charAt(0) + "M";

            String[] headers = { "Output Field", "Output Value", " MKTWire Field", " MKTWire Value", "Status" };
            List<String[]> data = new ArrayList<String[]>();

                String[] book = { "Book Ref", data2.getBookRef() + data2.getBookType(),"Book MKTWire",mkt.getBookIRS(), map.get("Book Ref")};
                String[] tradeDate = { "Trade Date", formatTradeDateMKT,"Trade Date MKTWire",mkt.getTradeDateIRS(), map.get("Trade Date")};
                String[] startDate = { "Start Date", formatStartDateMKT, "Start Date MKTWire",mkt.getStartDate(), map.get("Start Date") };
                String[] maturity = { "End Date", formatMAturityDateMKT, "End Date MKTWire",mkt.getEndDate(), map.get("End Date") };
                String[] tenor = { "Period Multiplier", data2.getPeriodMultiplier() + month, "Tenor MKTWire",mkt.getTenorIRS(), map.get("Period Multiplier") };
                String[] notional = { "Notional", notionalFormat, "Notional MKTWire", mkt.getNotionalValueIRS(), map.get("Notional") };
                String[] currency = { "Currency", data2.getCurrencyIRS(), "Currency MKTWire", mkt.getCurrencyIRS(), map.get("Currency") };
                String[] rate = { "Rate", rateActual, "Rate MKTWire", rateFormat, map.get("Rate") };
                String[] resetFrequency = { "Frequency Multiplier", data2.getResetFrequencyMultiplier() + monthReset, "Frequency Multiplier MKTWire", mkt.getResetFrequencyIRS(),map.get("Frequency Multiplier") };
                String[] dayCount = { "Day Count", data2.getDayCount(), "Day Count MKTWire", mkt.getDayCountIRS(), map.get("Day count") };

            data.add(headers);
            data.add(book);
            data.add(tradeDate);
            data.add(startDate);
            data.add(maturity);
            data.add(tenor);
            data.add(notional);
            data.add(currency);
            data.add(rate);
            data.add(resetFrequency);
            data.add(dayCount);
            
            
            cw.writeAll(data);
            cw.flush();
            fw.flush();
            cw.close();
            fw.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

【问题讨论】:

  • 您正在实例化一个映射Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();,但在将其传递给csv.reportMKTWireToOutputIRS(data, mkt, writeCSV,map); 之前,您没有向map 添加任何值。也许initMap(...) 应该将地图作为参数而不是创建新的?

标签: java csv testing hashmap


【解决方案1】:

您拥有一张地图,并且您正在调用 initMap 方法,该方法在一个循环中为地图中的所有键设置值,最后它会根据您的最终循环验证显示“ok”或“not ok” .

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 2016-03-08
    相关资源
    最近更新 更多