[英]Problems understanding the Stream.generate static method signature in java 8
[英]Cannot find Method inside Stream.generate().forEach()
System.out.println(GraphController.GRAPHPOOL.peek().getEdge());
Stream.generate(() -> {
try {
return GraphController.GRAPHPOOL.take();
} catch (InterruptedException ie) {
return "Interrupted!";
}
})
.forEach(g -> {System.out.println(g.getEdge());}
});
我能打印的物體Edge
通過返回getEdge
出Stream.generate().forEach()
,但是內forEach
我只能訪問對象g
。
嘗試訪問g.getEdge()
,出現如下錯誤:
error: cannot find symbol
System.out.println(g.getEdge());
symbol: method getEdge()
location: variable g of type Object
如何訪問g.getEdge()
?
由於調用了GraphController.GRAPHPOOL.take();
返回不同類型的語句return "Interrupted!"
,由generate中間方法返回的元素將全部為Object
類型,並且在Object
類中沒有稱為getEdge()
方法。 要解決該問題,您可以執行以下操作:
.forEach(g -> {
if(g instanceof TheType){
System.out.println(((TheType)g).getEdge());
}
else{
// "interrupted"
}
});
另外,請注意, generate(Supplier<T> s)
將返回無限的順序流 ,通常在這種情況下,您將需要使用limit截斷該流。
您必須將g
為所需的數據類型。 如您所見,變量g
當前是一個Object
。 只需使用(neededObjectforGetEdge(g)).getEdge()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.