2

从数组中获取选定对象的最快方法是什么?

MyObject[] objects = new MyObject[]{new MyObject(true), new MyObject(false)};
MyObject[] selectedObjects = ???

有没有比以下更快的方法:

ArrayList<MyObject> selObjectsList = new ArrayList<MyObject>();
for(MyObject obj : objects){
   if(obj.isSelected()){
       selObjectsList.add(obj);
   }
}
selectedObjects = selObjectsList.toArray(new MyObject[0]);

一个简单的操作就这么多行,有没有更短的操作来做同样的事情?

4

3 回答 3

3

使用标准库,没有(基本上)更整洁的方法可以做到这一点。但是有许多第三方库拥有filterpredicate支持。想到谷歌收藏。而且我也听说过关于LambdaJ的好消息。希望 Java 8 会有所改善!

使用 LambdaJ,它可能看起来像这样:

select(myList, having(on(MyObject.class).isSelected()));

编辑我将“最快”解释为最短的行数。如果您考虑的是性能,则此答案可能不合适。

于 2013-04-15T11:37:31.910 回答
0

很不幸的是,不行。如果您使用的是 ArrayList,它是一个线性列表,那么您实际上是在强制进行线性搜索。

如果您想改进查找,那么您可以使用 Map 之类的东西来加快查找速度,但您必须使用智能方法来设置键。例如,如果您要查找订单,则可以使用订单号作为键。

于 2013-04-15T11:41:06.523 回答
0

使用地图。

  Map<Boolean, List<MyObject>> someMap;

然后您可以执行以下操作来检索选定的“MyObjects”列表。

  someMap.get(true); 

并填充...

  someMap.put(myObjectInstance.isSelected(), myObjectInstance);
于 2013-04-15T11:41:34.787 回答