将ArrayList <SuperClass>转换为ArrayList <SubClass>

AFP*_*555 3 java inheritance arraylist

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

我怎样才能做到这一点?

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

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

Era*_*ran 8

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

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

我以为那NodoMoore是一个子类Nodo.


Dao*_*Wen 6

Nodo::getSalida您可以使用lambda 而不是使用方法handle()来代替:

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