【问题标题】:Java - Get 'View' of Collection by Type/InterfaceJava - 按类型/接口获取集合的“视图”
【发布时间】:2012-09-23 14:09:06
【问题描述】:

我需要在Set 中存储一些对象。有时我想遍历Set 中的所有内容,有时我只想遍历实现特定接口的那个。有些对象会实现我想要查看的几个接口。

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

【问题讨论】:

    标签: java collections guava


    【解决方案1】:

    使用番石榴 --

    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
    【解决方案2】:

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

    Hashtable<String,Set<YourObject>> ht = new Hashtable<String,Set<YourObject>>();
    

    String 是类型名称。这样您就可以选择要迭代的内容。

    【讨论】:

    • 感谢您的建议。这种方法的缺点是,当存储实现多个接口的东西时,我需要反思以找到所有感兴趣的接口,或者在编译时将它们“烘焙”(一系列instanceofs 和一个为每场比赛添加调用)。
    猜你喜欢
    • 2018-10-01
    • 2015-05-27
    • 2015-12-16
    • 2013-04-08
    • 2013-05-13
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多