对象的集合,并由超类找到它们

时间:2015-08-04 10:44:27

标签: java collections

我需要一个Collection来存储几个对象。我想用Class或Superclass访问它们。

例如:collection.get(Object.class)将返回所有对象。

我是否可以使用现成的课程,或者我需要自己编写课程。在这种情况下,我会使用HashMap<Class,Object>作为基础。

3 个答案:

答案 0 :(得分:4)

您可以使用Java 8 Streams以相对较短的语法检索所需的实例。例如:

List<SomeType> objects = collections.filter(o -> o instanceof SomeType).collect(Collectors.toList());

当然这样的代码需要遍历整个Collection。如果Collection很大并且性能是个问题,那么您应该将对象存储在一些允许更快检索的数据结构中(可能HashMap)。

答案 1 :(得分:1)

如果您使用的是Java 8,请考虑以前的帖子解决方案,否则您可以使用apache

 CollectionUtils.filter( youList, new Predicate(){
     public boolean evaluate( Object input ) {
        return input instanceof youClass;
     }
  } );

答案 2 :(得分:1)

不,没有内置便捷的方式。

但是,您可以轻松定义一种方法:

<T> List<T> getAllElements(Collection<?> collection, Class<T> targetClass) {
    List<T> result = new ArrayList<T>();
    for(Object obj : collection)
        if(targetClass.isInstance(obj))
            result.add(targetClass.cast(obj));
    return result;
}

这与Eran的lambda解决方案基本相同,但不使用Java 8功能。