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