将ArrayList <superclass>转换为ArrayList <subclass>

时间:2016-02-22 07:17:43

标签: java inheritance arraylist

我知道这听起来很愚蠢,但我确实需要它。 我100%肯定只允许SubClass进入arraylist。在该arraylist中没有SuperClass的其他子类。

我该怎么做?

    Map<String, List<Nodo>> map = ((Cast to ArrayList<NodoMoore> here)nodos).stream().
collect(Collectors.groupingBy(Nodo::getSalida));

我的类实现了一个让我使用Nodo而不是NodoMoore的接口,但是getSalida方法不是Nodo方法,只是NodoMoore方法。

2 个答案:

答案 0 :(得分:8)

如果您确定nodos仅包含NodoMoore的实例, 您可以使用强制转换器将Nodo实例映射到NodoMoore个实例:

Map<String, List<NodoMoore>> map = 
    nodos.stream()
         .map(n->(NodoMoore)n)
         .collect(Collectors.groupingBy(NodoMoore::getSalida));

我认为NodoMooreNodo的子类。

答案 1 :(得分:6)

不是使用方法句柄(Nodo::getSalida),而是可以使用lambda并在那里进行转换:

Map<String, List<Nodo>> map = nodos.stream()
    .collect(Collectors.groupingBy(x->((NodoMoore)x).getSalida());