【问题标题】:Strange issue with populating LinkedHashSet填充 LinkedHashSet 的奇怪问题
【发布时间】:2013-04-25 14:10:07
【问题描述】:

鉴于下面的代码,当最后的 if-else 语句进入 else 子句时,如果我取消注释这两行代码并注释“FOOZANAZABAR”和“TESTCAIRO”行,是否有某种原因?不会将这些行添加到 LinkedHashSet 中吗?它似乎添加 values.add(new BigDecimal(PEUNIT).multiply(new BigDecimal(1000)).toString()); 当逻辑进入 else 子句时正确,但不会将 BD.ZERO 或 PEFAMT 添加到该字段,尽管它们是字符串。

请注意,ZERO 和 PEFAMT 是转换为字符串的 BigDecimal。这是唯一让我感到悲伤的两个价值观。任何方向将不胜感激。

public static LinkedHashMap<String, LinkedHashSet<String>> convertTransactionTableData(ResultSet rs) {
    LinkedHashMap<String, LinkedHashSet<String>> returnableMap = new LinkedHashMap<String, LinkedHashSet<String>> ();

    try {
        while (rs.next()){
            String PEFAMT, PEPOLN, MCISST, PEBRCD, PEEFFY, PEPLAN;
            String PEUNIT, PETRNC, PECO, PEITYP, ZERO;

            PEPOLN = rs.getString("PEPOLN");
            MCISST = rs.getString("MCISST");
            PEBRCD = rs.getBigDecimal("PEBRCD").toString();
            PEEFFY = rs.getBigDecimal("PEEFFY").toString();
            PEPLAN = rs.getString("PEPLAN");
            PEUNIT = rs.getBigDecimal("PEUNIT").toString();
            PEFAMT = rs.getBigDecimal("PEFAMT").toString();
            PETRNC = rs.getString("PETRNC");
            PECO = rs.getString("PECO");
            PEITYP = DataConverter.resetInsuranceType(rs.getString("PEITYP"));
            ZERO = BigDecimal.ZERO.toPlainString();

            String policyNumber = PEPOLN;
            LinkedHashSet<String> values = new LinkedHashSet<String>();
            values.add(MCISST);
            values.add(PEBRCD);
            values.add(PEEFFY);
            values.add(PEPLAN);
            values.add(PEUNIT);
            if (PEPLAN.equalsIgnoreCase("HSRE")) {
                values.add(new BigDecimal(PEUNIT).multiply(new BigDecimal(1000)).toString());
            } else {
                values.add(PEFAMT);
            }
            values.add(PETRNC);
            values.add(PECO);
            values.add(PEITYP);
            if (DataConverter.testStringToInt(PETRNC)) {
                if (Integer.valueOf(PETRNC) >= 20 && Integer.valueOf(PETRNC) <= 29) {
                    values.add(PEFAMT);
                    values.add(ZERO);
                    values.add(ZERO);
                } else {
                    values.add("FOOZANZABAR");
                    values.add("TESTCAIRO");
//                      values.add(ZERO);
//                      values.add(PEFAMT);
                    values.add(new BigDecimal(PEUNIT).multiply(new BigDecimal(1000)).toString());
                }
            }
            returnableMap.put(policyNumber, values);
        }
    } catch (SQLException sqlEx) {
        logger.error("Problem converting the ResultSet.  ", sqlEx);
    }
    return returnableMap;
}

提前谢谢你。

  • 乔什

【问题讨论】:

    标签: java logic bigdecimal linkedhashset


    【解决方案1】:

    请注意,您在此处使用的基础数据结构是 SET,这意味着它不会让您添加重复项。 BD.ZERO 和 PEFAMT 的 字符串值 很可能已经存在于您的 values 集中,因此将被忽略。

    如果是这种情况,只需切换到使用允许重复的LinkedList&lt;String&gt;。

    【讨论】:

      猜你喜欢
      • 2011-06-05
      • 2012-06-02
      • 2013-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多