2011-11-30 3 views
0

我有一個ArrayListCar對象,我想從ArrayList所有的唯一名稱爲String或只是符合該條件的Car對象來獲得。通過元素屬性的Java ArrayList的過濾器

EG:

public class Car { 

    private String name; 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getName() { 
     return this.name; 
    } 
} 

現在我有carArray包含了很多Car對象。 爲了得到獨一無二的名字我做這樣的事情:

Set<String> setOfNames = new HashSet<String>(); 

for (Car car : carArray) { 
    setOfNames.add(car.getName()); 
} 

for (String name : setOfNames) { 
    System.out.println(name); 
} 

有過濾通過它的元素屬性的ArrayList更好/更快的方法?

謝謝!

+0

你想從很多'Car's的獲得與屬性值的列表?或者你想過濾你的「汽車」列表?什麼是過濾標準呢? –

+0

我剛剛試過這段代碼,這個hashset讓我在setOfNames裏面有重複的值嗎?你能解釋你如何管理以避免重複使用此代碼。我錯過了一些東西? – Zohaib

+0

@ Fatal:我想要一個包含很多Car對象屬性值的列表:D – Cata

回答

1

我想你是在談論一些屬性(如其他語言可用),但在java中不可用,所以最好的方法是使用setter和getters。 所以我的建議是堅持使用你的代碼,因爲工作非常快:)

祝你好運, Arkde

1

無論如何,您必須遍歷列表,檢查每個條目並將其收集到另一個集合中。如果您多次執行相同的搜索,則按照該條件對列表進行排序可能是一種選擇。

附註:如果carArray實際上是Car[],則不需要在第一個循環內進行強制轉換,只需執行for (Car car : carArray)即可。如果是Object[],您應該重新考慮您的設計,因爲在您的循環中,您無論如何都假設每個條目都是Car

+0

是的,忘記了演員表,抱歉..我將編輯我的問題。謝謝 – Cata

0

您的設置setOfNames是否包含唯一值?因爲如果這是Car類的實現,那麼你還沒有重寫equalshashCode的方法,hashSet如何確保兩個對象是相同的?

我想,你將不得不重寫equals和hashcode方法來確保hashset不包含重複項。

+0

嗯..這是我的真實代碼,一切都很好:)。請注意,我有一組字符串不是一組車對象... – Cata

+0

哦,親愛的上帝!這就是原因,默認情況下,String類的散列碼和等號函數被重載,所以我們不必爲自己重載....我一直在轉,因爲在我的例子中,我創建了汽車的對象。 – Zohaib