[英]CompletableFuture in Java8
I have this piece of code that I wanted to refactor to Java 8 我有这段代码,我想重构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());
}
}
After refactoring this simple loop it seems like too much code... am I using CompletableFutures correctly? 重构这个简单的循环之后,似乎代码太多......我是否正确使用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()));
Why not just? 为什么不呢?
List<String> menus = resto1.getMenu()
.stream()
.map(m -> MainIngredient.getMainIngredient(m.getName()))
.filter(m -> m.getIngredient().indexOf("Vegan")!=-1)
.collect(toCollection(ArrayList::new));
is your imperative approach really slow that you have to use CompletableFuture
? 你必须使用
CompletableFuture
,你的必要方法真的很慢吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.