2013-04-25 256 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