2011-11-30 88 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