Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:展平列表或对象列表,保留类_Java_List_Generics_Nested Lists_Flatten - Fatal编程技术网

Java:展平列表或对象列表,保留类

Java:展平列表或对象列表,保留类,java,list,generics,nested-lists,flatten,Java,List,Generics,Nested Lists,Flatten,我想在类FunctionalList implements List中编写一个方法flant()。然而,事实上,平铺列表并不是问题所在;我需要保留原始列表中包含最深的类 我假设原始列表包含元素,这样就有了一些类,这样类型为T的扁平列表中的每个元素。我希望该方法返回FunctionalList。然而,我想不出一种方法来获得这个类,因为我在使用泛型,所以这个问题变得特别困难 我编写了一个简单的递归算法来平展列表: public <T> FunctionalList<T> fl

我想在类
FunctionalList implements List
中编写一个方法
flant()
。然而,事实上,平铺列表并不是问题所在;我需要保留原始列表中包含最深的类

我假设原始列表包含元素,这样就有了一些类
,这样类型为
T
的扁平列表中的每个元素。我希望该方法返回
FunctionalList
。然而,我想不出一种方法来获得这个类,因为我在使用泛型,所以这个问题变得特别困难

我编写了一个简单的递归算法来平展列表:

public <T> FunctionalList<T> flatten(){
    FunctionalList<T> l = new FunctionalList<T>();
    for(E e : this){
        if(e instanceof FunctionalList)
            l.addAll(((FunctionalList<?>)e).flatten());
        else
            l.add((T)e);
    }
    return l;
}
public FunctionalList flatte(){
FunctionalList l=新FunctionalList();
对于(E:本){
if(函数集的实例)
l、 addAll(((FunctionalList)e.flatte());
其他的
l、 加上((T)e);
}
返回l;
}

但它看起来总是返回
FunctionalList
,这并不理想。例如,有没有办法将
[1,2,3,4,5,6,7,8,9,10]
展平到
[1,2,3,4,5,6,7,8,9,10]
,同时将结果存储为
列表(或类似内容)?

我想出了一个解决方案。。。差不多

创建一个接口
Listable
,该接口充当实现类为
E
List
的契约。也就是说,
FunctionalList实现了Listable
。然后写下方法:

public static <L extends Listable<L>> FunctionalList<L> flatten(FunctionalList<? extends Listable<L>> l){
    FunctionalList<L> r = new FunctionalList<L>();
    for(Listable<L> e : l){
        if(e instanceof FunctionalList)
            r.addAll(flatten((FunctionalList<? extends Listable<L>>)e));
        else
            r.add((L)e);
    }
    return r;
}

公共静态函数集展平(FunctionalList
FunctionalList
应该是泛型的,而不仅仅是本例中的方法。因此,E是T的超类,您试图找到最专门的T?或者它会像在方法中重用E一样简单,当然不会再次声明它吗?@Sebastian E在本例中很可能是Object,因为这是我所知道的唯一方法包含T和List。