私が持っているとします
ArrayList<Fruit>
Fruit の特定のサブクラスのこのリストからすべての要素を取得したいと思います。
ArrayList<Apple>
C# はかなり便利なようです
OfType<T>()
方法。Javaでこれを行う同等の方法はありますか?
乾杯
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;
}
グアバで、それはただです
List<Apple> apples =
Lists.newArrayList(Iterables.filter(fruitList, Apple.class));
(開示:私はグアバに貢献します。)
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);
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;
}