car*_*era 8 java java-8 java-stream completable-future
我有这段代码,我想重构Java 8
List<String> menus = new ArrayList<String>();
for (Menu menu : resto1.getMenu()) {
MainIngredient mainIngredient = MainIngredient.getMainIngredient(menu.getName());
if (mainIngredient.getIngredient().indexOf("Vegan")!=-1) {
menus.add(menu.getName());
}
}
Run Code Online (Sandbox Code Playgroud)
重构这个简单的循环之后,似乎代码太多......我是否正确使用CompletableFutures?
ExecutorService executorService = Executors.newCachedThreadPool();
List<CompletableFuture<MainIngredient>> priceFutureList = resto1.getMenu().stream()
.map(menu -> CompletableFuture.supplyAsync(
() -> MainIngredient.getMainIngredient(menu.getName()), executorService))
.collect(Collectors.toList());
CompletableFuture<Void> allFuturesDone = CompletableFuture.allOf(
priceFutureList.toArray(new CompletableFuture[priceFutureList.size()]));
CompletableFuture<List<MainIngredient>> priceListFuture =
allFuturesDone.thenApply(v -> priceFutureList.stream()
.map(CompletableFuture::join)
.collect(toList()));
Run Code Online (Sandbox Code Playgroud)
为什么不呢?
List<String> menus = resto1.getMenu()
.stream()
.map(m -> MainIngredient.getMainIngredient(m.getName()))
.filter(m -> m.getIngredient().indexOf("Vegan")!=-1)
.collect(toCollection(ArrayList::new));
Run Code Online (Sandbox Code Playgroud)
你必须使用的必要方法真的很慢CompletableFuture吗?
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |