使用Java从列表中选择特定对象

时间:2014-10-07 10:56:48

标签: java list object arraylist

可能是我在这里缺少的一些基本内容,但是从列表中选择符合某些条件的对象的最佳方法是什么? 说我们有:

class MyObject {
    int id;
    String type;

    // getters..setters
}

我用它:

    List<MyObject> myObjects = new ArrayList<MyObject>();
    myObjects = getListOfObjects();

现在我们可以说myObjects中有10个项目,其中3个项目有type=="bla"。目前我只是循环遍历所有对象,并在循环内决定我是否需要它,但有更好的方法吗?

我记得在C#中我曾经有类似

的东西
myObjects.Where(x => x.type.equals("bla"));

PS,我的目标是Java 7,所以还没有lambda。

2 个答案:

答案 0 :(得分:0)

我不认为你可以在不创建某种索引的情况下做到这一点。所以例如Map<String, Map<String, Set<MyObject>>>您可以拨打index.get("type").get("bla")。但你必须首先构建这个结构。如果a)没有对属性进行更改 AND b)你有很多对象,这将非常有用。对于10个对象,这里的表现无关紧要,我只是做你现在正在做的事情并将其隐藏在一些非常方便的方法中。

答案 1 :(得分:0)

您可以将LambdaJ library及其Lambda.exists方法与一些自定义Hamcrest匹配器一起使用。然后你可以使你的主要代码看起来像这样:

if (exists(myObjects, typeIs("bla"))) { /* ... */ }

...前提是您自己创建自定义匹配器方法typeIs。但如果我只有一个地方只有10个项目,我就不会这样下去。

它还取决于您的数据:如果您的列表已排序,您可以do a binary search。如果您在列表中有数千个项目,那么这将更有用。

最后,您可以使用Collection.containsmyObjects.contains(blaElement),但这要求blaElement有一个equals方法返回&#34; true&#34;当类型匹配时。