2017-04-09 68 views
-3

嘿我收集器有這個問題。 <? super Object, R> R值不要發現java stream toCollection ArrayList R找不到

爲例:

Stream stream = DentityList.stream().filter(entity -> entity instanceof EntityLivingBase); 
Stream streamMap = stream.<Object>map(entity -> (EntityLivingBase)entity); 

Stream stream1 = streamMap.<ArrayList<EntityLivingBase>, Entity>collect((Collectors.<? super Object, R>toCollection((Supplier<R>)ArrayList::new)));

list type = arrayList<EntityLivingBase> (edit) 

請幫我沒有得到它!

+1

「R」類定義在哪裏? –

+0

在一個不相關的說明中,爲什麼你要使用原始'Stream'類型(而不是'Stream '?) –

+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,具體問題或錯誤以及在問題本身中重現問題所需的最短代碼,沒有明確問題陳述的問題對其他讀者沒有用處,請參閱:如何創建[mcve]。 – GhostCat

回答

0

您不應該在每個方法調用中使用參數,而應該在類型聲明中使用參數。

List<SomeClass> DentityList = new ArrayList<>(); 
Stream<SomeClass> stream = DentityList.stream().filter(entity -> entity instanceof EntityLivingBase); 
Stream<EntityLivingBase> streamMap = stream.map(entity -> (EntityLivingBase) entity); 

List<EntityLivingBase> collect = streamMap.collect((Collectors.toList())); 

既然你沒有說你名單包括什麼類型的,我把它叫做SomeClass(這顯然已成爲EntityLivingBase超類)

此外,由於要轉換您的StreamListCollectors.toList()是比較合適的。

這種方式你不應該有不合理的參數問題。

+0

它的一個ArrayList < EntityLivingBase> – cleancode

+0

@cleancode然後你到底想要達到什麼目的?因爲Stream的每個元素都是一個EntityLivingBase,所以filter和map操作都不會執行興。基本上你是複製列表到另一個列表 – SilverNak

+0

多數民衆贊成我正在嘗試做 – cleancode