【发布时间】:2012-09-23 14:09:06
【问题描述】:
我需要在Set 中存储一些对象。有时我想遍历Set 中的所有内容,有时我只想遍历实现特定接口的那个。有些对象会实现我想要查看的几个接口。
是否有设计模式或 Guava/Java 类允许在 Set 或其他集合上按类型查看?最好以最有效的方式进行,因为此代码将成为每 17 毫秒调用一次的核心游戏循环的核心。
【问题讨论】:
标签: java collections guava
我需要在Set 中存储一些对象。有时我想遍历Set 中的所有内容,有时我只想遍历实现特定接口的那个。有些对象会实现我想要查看的几个接口。
是否有设计模式或 Guava/Java 类允许在 Set 或其他集合上按类型查看?最好以最有效的方式进行,因为此代码将成为每 17 毫秒调用一次的核心游戏循环的核心。
【问题讨论】:
标签: java collections guava
使用番石榴 --
Sets.filter(set, Predicates.instanceOf(Foo.class));
【讨论】:
Iterable 视图足够,您也可以使用Iterables.filter(Iterable<?> unfiltered, Class<T> type)。这是Iterables.filter(Iterable<T> unfiltered, Predicate<? super T> predicate) 的重载,它会自动转换返回的Iterable。
您是否考虑过将对象保存在哈希表中?
Hashtable<String,Set<YourObject>> ht = new Hashtable<String,Set<YourObject>>();
String 是类型名称。这样您就可以选择要迭代的内容。
【讨论】:
instanceofs 和一个为每场比赛添加调用)。