Java-按类型/接口获取集合的“视图”

Java-按类型/接口获取集合的“视图”,java,collections,guava,Java,Collections,Guava,我需要在一个集合中存储一些对象。有时我想迭代集合中的所有内容,有时我只想迭代实现特定接口的部分。一些对象将实现我想要查看的几个接口 是否有设计模式或Guava/Java类允许按类型查看集合或其他集合?最好是以最有效的方式,因为此代码将是每17毫秒调用一次核心游戏循环的中心。您是否考虑过将对象保存在哈希表中 Hashtable<String,Set<YourObject>> ht = new Hashtable<String,Set<YourObject>

我需要在一个集合中存储一些对象。有时我想迭代集合中的所有内容,有时我只想迭代实现特定接口的部分。一些对象将实现我想要查看的几个接口


是否有设计模式或Guava/Java类允许按类型查看集合或其他集合?最好是以最有效的方式,因为此代码将是每17毫秒调用一次核心游戏循环的中心。

您是否考虑过将对象保存在哈希表中

Hashtable<String,Set<YourObject>> ht = new Hashtable<String,Set<YourObject>>();
其中字符串是类型名称。这样你就可以选择迭代什么了。

用番石榴-

Sets.filter(set, Predicates.instanceOf(Foo.class));

谢谢你的建议。这种方法的缺点是,在存储实现多个接口的东西时,我需要反射以查找所有感兴趣的接口,或者在编译时将它们“烘焙”在一系列InstanceOf中,并为每个匹配项添加一个add调用。遍历将迭代整个集合,如果不愿意为作业创建专门的数据结构,这或多或少是不可避免的。如果Iterable视图足够,还可以使用Iterable.Filteritable unfiltered类类型。这是一个超负荷的Iterables.filterIterable未过滤,谓词