我有一个异步方法,其结果是completeablefuture:
public CompletableFuture<DogLater> asyncDogLater(String dogName){}
我有一条狗清单:
List<Dog> dogs;
现在,我想创建一条从狗的名字到Completeablefuture的地图:
Map<String, CompletableFuture<DogLater>> map;
Map<String, CompletableFuture<DogLater>> completableFutures = dogs.stream()
.collect( Collectors.toMap(Dog::getName,
asyncDogLater(Dog::getName )));
但是编译器抱怨第一个Dog::getName
有问题,因为:
不能从静态上下文中引用非静态方法
第二个Dog::getName
的错误是:
字符串不是功能接口
我也检查了this post,但是我仍然不确定如何解决这个问题。
答案 0 :(得分:2)
Collectors.toMap()
的第二个参数必须是Function<T,R>
类型的Function<Dog,CompletableFuture<DogLater>>
。
asyncDogLater(Dog::getName)
的类型为Function<Function<Dog, String>, CompletableFuture<DogLater>>
。
您需要toMap(Dog::getName, d -> asyncDogLater(d.getName()))
。