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

グアバで、それはただです

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

(開示:私はグアバに貢献します。)

于 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

Java で C# の linq のような同様の機能を得るために、JLinq という小さなユーティリティを作成しました。そのうちの 1 つは 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 に答える