2010-09-27 81 views
0

與收集整理我有一個HashMap:問題在Java

HashMap<String,QuoteBean> map = new HashMap<String,QuoteBean>(); 

QuoteBean是一個普通的bean:

class QuoteBean{ 
    String symbol; 
    BigDecimal price; 
    BigDecimal quoteprice; 
    //setter and getter methods 
} 

然後,我得到了地圖的價值會QuoteBean集合對象

Collection obs =map.values(); //getting all the quoteobjects 
List list = new ArrayList(obs); //converted to list 

然後進行排序:

Collection.sort(list, new SymbolComparator()); 

SymolComparator是:

public class SymbolComparator implements Comparator<QuoteBean>{ 
    String symbol; 
    @Override 
    public int compare(QuoteBean o1, QuoteBean o2) { 
     String symbol1=o1.getProductId().getSymbol(); 
     String symbol2=o2.getProductId().getSymbol(); 
     return symbol1.compareTo(symbol2); 
    }  
} 

當我執行的代碼,我得到一個exeception它說不能轉換StringQuoteBean和異常的第一行拋出。

+0

你可以包含堆棧跟蹤嗎? – 2010-09-27 23:37:46

+0

東西告訴我,這實際上不是導致錯誤的代碼。 – 2010-09-27 23:40:04

+0

在compare()方法中,你做了o1.getProductId()... getProductId()返回什麼? – weiji 2010-09-27 23:42:15

回答

2

你是正面的,你不是從鍵創建一個列表?

Collection obs =map.values(); //getting all the quoteobjects 
List list = new ArrayList(obs); 

只是爲了好玩確保你可以做

List<QuoteBean> beans = new ArrayList<QuoteBean>(map.values()); 
+0

我很確定我只從地圖獲取值,因爲一旦我得到列表,我正在迭代列表並打印打印所有值的內容... – swati 2010-09-27 23:55:53

+0

給我們堆棧跟蹤,並開始進行一些調試您的比較器功能中的語句,我們將能夠提供更多幫助。 – I82Much 2010-09-28 00:38:23

2

我認爲錯誤是與這兩個語句...

String symbol1=o1.getProductId().getSymbol(); 
String symbol2=o2.getProductId().getSymbol(); 

如果希望基於字符串進行排序你可以只說o1.symbol來獲取字符串。我仍然不明白getproductid()用於什麼。

0

我覺得

o1.getProductId().getSymbol(); 

,而不是你應該做的

o1.getSymbol(); 

因爲QuoteBean有符號作爲一個屬性。

class QuoteBean{ 
    String symbol; 
    BigDecimal price; 
    BigDecimal quoteprice; 
    //setter and getter methods 
}