如何将List <Item>转换为Map <Item,completeablefuture <xyz >>

时间:2019-06-05 14:37:22

标签: java java-stream completable-future method-reference

我有一个异步方法,其结果是completeablefuture:

public CompletableFuture<DogLater> asyncDogLater(String dogName){}

我有一条狗清单:

List<Dog> dogs;

现在,我想创建一条从狗的名字到Completeablefuture的地图:

Map<String, CompletableFuture<DogLater>> map;

在检查thisthis之后,我试图这样做:

    Map<String, CompletableFuture<DogLater>> completableFutures = dogs.stream()
            .collect( Collectors.toMap(Dog::getName,
                                       asyncDogLater(Dog::getName )));

但是编译器抱怨第一个Dog::getName有问题,因为:

  

不能从静态上下文中引用非静态方法

第二个Dog::getName的错误是:

  

字符串不是功能接口

我也检查了this post,但是我仍然不确定如何解决这个问题。

1 个答案:

答案 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()))