Как превратить Список <Item>в Карту <Item, completeablefuture <xyz>> - PullRequest
2 голосов
/ 05 июня 2019

У меня есть асинхронный метод с готовым будущим результатом:

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

У меня есть список собак:

List<Dog> dogs;

Теперь я хочу создать карту из имени собакик Завершаемому будущему:

Map<String, CompletableFuture<DogLater>> map;

После проверки это и это Я пытался сделать это:

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

Но компилятор жалуетсячто первый Dog::getName проблематичен, поскольку:

Нестатический метод не может быть вызван из статического контекста

А второй Dog::getName имеет ошибку:

Строка не является функциональным интерфейсом

Я также проверил этот пост , но я все еще не уверен, как решить эту проблему.

1 Ответ

2 голосов
/ 05 июня 2019
Второй аргумент

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())).

...