【问题标题】:Java ArrayList filter by element's propertiesJava ArrayList 按元素属性过滤
【发布时间】:2011-11-30 19:15:56
【问题描述】:

我有一个包含Car 对象的ArrayList,我想从该ArrayList 中获取所有唯一名称,如String 或仅满足该条件的Car 对象。

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?

谢谢!

【问题讨论】:

  • 您想从大量Cars 中获取包含属性值的列表吗?或者您想过滤您的Cars 列表?那么过滤条件是什么?
  • 我刚试过这段代码,这个哈希集允许我在 setOfNames 中有重复的值?您能否解释一下您是如何设法避免使用此代码重复的。我错过了什么吗?
  • @Fatal:我想要一个包含很多 Car 对象的属性值的列表:D

标签: java arrays optimization arraylist


【解决方案1】:

我猜你说的是一些属性,比如 features(在其他语言中可用),但在 java 中不可用,所以最好的方法是使用 setter 和 getter。 所以我的建议是坚持你的代码,因为它工作得很快:)

祝你好运, 方舟

【讨论】:

    【解决方案2】:

    无论如何,您都必须遍历列表,检查每个条目并将其收集到另一个集合中。如果您多次执行相同的搜索,则可以选择按该条件对列表进行排序。

    附注:如果carArray 实际上是Car[],则您不需要在第一个循环中进行强制转换,只需执行for (Car car : carArray)。如果是Object[],你应该重新考虑你的设计,因为在你的循环中你假设每个条目都是Car

    【讨论】:

    • 是的,忘记演员表了,对不起..我会编辑我的问题。谢谢
    【解决方案3】:

    您的集合setOfNames 是否包含唯一值?因为如果这是Car类的实现那么你还没有重写equalshashCode的方法,hashSet如何确保两个对象相同?

    我猜,你必须重写 equals 和 hashcode 方法以确保 hashset 不包含重复项。

    【讨论】:

    • 嗯..这是我真正的代码,一切都很好:)。请注意,我有一组字符串而不是一组 Car 对象...
    • 天哪!这就是原因,默认情况下,String 类的哈希码和 equals 函数被重载,所以我们不必自己重载......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2022-01-18
    • 1970-01-01
    • 2020-08-03
    相关资源
    最近更新 更多