2013-04-25 206 views
1

考虑下面的代码,是有一些原因,当最后的if-else语句步入else子句,如果我取消注释的两行代码和注释的“FOOZANAZABAR”和“TESTCAIRO “行,它不会将这些行添加到LinkedHashSet?它似乎添加 values.add(新的BigDecimal(PEUNIT).multiply(新的BigDecimal(1000))。toString()); 正确,当逻辑落入else子句,但不会将BD.ZERO或PEFAMT添加到该字段DESPITE他们是字符串的事实。奇怪的问题与填充LinkedHashSet

作为一个说明,零和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; 
} 

在此先感谢您。

  • 乔希

回答

2

请注意,您在使用这里的底层数据结构是SET,这意味着它不会让你添加重复。在所有的可能性中,串值BD.ZERO的和PEFAMT必须已经存在于你的values集,并因此得到忽略。

如果这原来是这样简单地切换到使用LinkedList<String>,让您有重复。

+0

就是这样。非常感谢!非常感激! – ResourceReaper 2013-04-25 14:31:29

+0

不客气。 – 2013-04-25 14:35:22