1

假设我有一个

ArrayList<Fruit>

我想从任何给定的 Fruit 子类的列表中获取所有元素,例如

ArrayList<Apple>

C#似乎有一个比较好用的

OfType<T>() 

方法。在 Java 中是否有等效的方法?

干杯

4

4 回答 4

5
public static <T> Collection<T> ofType(Collection<? super T> col, Class<T> type) {
  final List<T> ret = new ArrayList<T>();
  for (Object o : col) if (type.isInstance(o)) ret.add((T)o);
  return ret;
}
于 2012-07-08T11:11:05.827 回答
2

使用Guava,它只是

List<Apple> apples =
  Lists.newArrayList(Iterables.filter(fruitList, Apple.class));

(披露:我为 Guava 做出了贡献。)

于 2012-07-08T11:25:09.100 回答
0
List<Fruit> list=new ArrayList<Fruit>();
//put some data in list here
List<Apple> sublist=new ArrayList<Apple>();
for (Fruit f:list)
    if(f instanceof Apple)  
        sublist.add((Apple)f);
于 2012-07-08T11:16:41.467 回答
0

我们创建了一个名为 JLinq 的小实用程序来获得类似于 java 中 C# 中的 linq 的功能,其中一个类似于 typeof:

 /**
 * @param <T> the type of the list
 * @param list the list to filter
 * @param type the desired object type that we need from these list
 * @return a new list containing only those object that from the given type 
 */
public static <T> LinkedList<T> filter(LinkedList<T> list, Class<T> type) {
    LinkedList<T> filtered = new LinkedList<T>();
    for (T object : list) {
        if (object.getClass().isAssignableFrom(type)) {
            filtered.add(object);
        }
    }
    return filtered;
}
于 2012-07-08T11:19:20.713 回答