1

最后在 Java 8 中使用 CompletableFuture dealio。我遇到了一个我不太理解的编译错误(在我的 IDE 中)。

我有一个List<String>要附加到 URL 的标识符,然后异步调用每个 url。到目前为止,我只有这几种方法。

private void process(List<String> identifiers) {

    List<CompletableFuture<String>> futures = identifiers.stream()
            .map(CompletableFuture.thenApply(this::sendRequest))
            .collect(toList());   
}

private void sendRequest(String s) {
        // do some URL building and append the string to the end of the url.
        // then call it, don't care about result yet
}

我得到的编译器错误出现this::sendRequest在第一种方法中。它抱怨我的班级没有定义sendRequest(Object)方法。

但是我想通过输入identifiers我不需要担心在我的 lambda 表示法中调用类型?我什至不确定如何使用::运算符指定类型。也许我什至不应该使用::运营商?我很困惑。

4

1 回答 1

2

thenApply必须在已经存在的CompletableFuture对象上调用。例如,

List<CompletableFuture<String>> futures = identifiers.stream()
        .map(CompletableFuture::completedFuture)  // makes CompletableFuture<String>
        .map(f -> f.thenApply(this::sendRequest))
        .collect(toList());   
于 2016-04-20T20:33:53.267 回答