将ArrayList <!-?->转换为ArrayList <classname>

时间:2018-09-04 08:12:34

标签: java generics arraylist

我有要在ArrayAdapter上设置的通用ArrayList,它也是一个通用类型适配器。现在,我想将ArrayList<?>转换为ArrayList<MyClass>。我已经搜索了很多,但无法弄清楚。谢谢你的帮助。

我有这两个通用类型的适配器和列表。

private ArrayAdapter<?> GeneralAdapter;
private ArrayList<?> GeneralList;

我正在Listview上设置此适配器。并动态地将不同类型的类添加到列表中,例如

GeneralList<State>
GeneralList<District>

设置此列表后,我正在使用notifydatasetchanged()更新适配器。

我现在只需要根据需要将此GeneralList转换为ArrayList,ArrayList。我一次添加一个项目,然后将其再次用于其他类,我清除了generalList,然后将其设置为另一个类。

1 个答案:

答案 0 :(得分:2)

使用动态投射可以实现这一目标。

如果要从GeneralList获得状态列表,则->

List<State> states = filter(State.class, GeneralList);

这是您的过滤器功能->

static <T> List<T> filter(Class<T> clazz, List<?> items) {
        return items.stream()
                .filter(clazz::isInstance)
                .map(clazz::cast)
                .collect(Collectors.toList());
}

来源-> dynamic Casting in Java