需求:
CompletableFuture的suppayAsync()方法
public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier, Executor executor)
kotlin 寫法
val executor = Executors.NewExecutors.newFixedThreadPool(Math.min(shops.size, 100)) { r ->
val t = Thread(r)
t.isDaemon = true
t
}
val priceFutures = shops.stream()
.map { shop ->
CompletableFuture.supplyAsync(
{ "${shop.name} price is ${shop.getPrice(shop.name)}" }, executor)
}.collect(Collectors.toList())
沒錯吧, kotlin的lambda就是這么寫的啊, 可是報錯
image01.png
噴了, 單參數(shù)的supplyAsync這樣寫沒有問題的啊,
image02.png
想到了IDEA可以將java代碼轉換成kotlin代碼, 媽蛋那我寫java版本的轉換一下,
java版本
image03.png
轉換
image04.png
image05.png
又噴了, 這和我之前自己寫的一模一樣啊, 依然報錯啊. 放大招, 我強轉
image06.png
不報錯了.運行一下, 結果:
image07.png
強轉也不行啊, 這可咋整.
沒辦法, 只有寫匿名內(nèi)部類了
image08.png
可以了, 也可以運行, 但是, 哎喲我擦, 那條黃線什么意思!
image09.png
再次噴了, 提示我轉lambda, 不會還是和之前轉的一樣吧, 試試
image10.png
哎喲我擦. 要主動構造一個Supplier<String>才可以啊