當前位置: 首頁>>代碼示例>>Java>>正文


Java CompletableFuture.thenCompose方法代碼示例

本文整理匯總了Java中java.util.concurrent.CompletableFuture.thenCompose方法的典型用法代碼示例。如果您正苦於以下問題:Java CompletableFuture.thenCompose方法的具體用法?Java CompletableFuture.thenCompose怎麽用?Java CompletableFuture.thenCompose使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在java.util.concurrent.CompletableFuture的用法示例。


在下文中一共展示了CompletableFuture.thenCompose方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: rejectConnectionsAsync

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Indicates that the node should stop accepting new connections.
 *
 * @param after If non-zero, after how many successful startup messages should stop accepting
 *     connections.
 * @param scope The scope to reject connections, either stop listening for connections, or accept
 *     connections but don't respond to startup requests.
 * @return future that completes when listening channel is unbound (if {@link RejectScope#UNBIND}
 *     was used) or immediately if {@link RejectScope#REJECT_STARTUP} was used or after > 0.
 */
@Override
public CompletionStage<Void> rejectConnectionsAsync(int after, RejectScope scope) {
  RejectState state;
  if (after <= 0) {
    logger.debug("Rejecting new connections with scope {}", scope);
    state = new RejectState(false, Integer.MIN_VALUE, scope);
  } else {
    logger.debug("Rejecting new connections after {} attempts with scope {}", after, scope);
    state = new RejectState(true, after, scope);
  }
  rejectState.set(state);
  if (after <= 0 && scope != RejectScope.REJECT_STARTUP) {
    CompletableFuture<Void> unbindFuture = unbind();
    // if scope is STOP, disconnect existing connections after unbinding.
    if (scope == RejectScope.STOP) {
      return unbindFuture.thenCompose(n -> disconnectConnections());
    } else {
      return unbindFuture;
    }
  } else {
    return CompletableFuture.completedFuture(null);
  }
}
 
開發者ID:datastax,項目名稱:simulacron,代碼行數:34,代碼來源:BoundNode.java

示例2: testCompletedThenComposeCancelled

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * This test is one part of verifying https://github.com/tunnelvisionlabs/java-threading/issues/11.
 */
@Test
public void testCompletedThenComposeCancelled() {
	CompletableFuture<Void> future = new CompletableFuture<>();
	future.complete(null);
	CompletableFuture<Void> composed = future.thenCompose(s -> Futures.completedCancelled());

	Assert.assertTrue(composed.isDone());
	Assert.assertTrue(composed.isCompletedExceptionally());

	if (Async.REQUIRE_UNWRAP_FOR_COMPLETED_ANTECEDENT) {
		Assert.assertFalse("The current runtime does not preserve cancellation when the antecedent is pre-completed", composed.isCancelled());

		thrown.expect(CompletionException.class);
		thrown.expectCause(isA(CancellationException.class));
		composed.join();
	} else {
		Assert.assertTrue(composed.isCancelled());

		thrown.expect(CancellationException.class);
		composed.join();
	}
}
 
開發者ID:tunnelvisionlabs,項目名稱:java-threading,代碼行數:26,代碼來源:AsyncTest.java

示例3: exchange

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Start a key exchange process
 * 
 * @param groupId
 *            the id of the group for which a key exchange will be initiated
 * @param aHandler
 *            the handler which succeeds or fails in accordance to the key
 *            exchange outcome
 * @return A Future representation of the key
 */
public CompletableFuture<BigInteger> exchange(int groupId, Handler<AsyncResult<BigInteger>> aHandler) {
    conf.getLogger().info(getNode().toString() + Constants.NEGO_CALL + groupId);
    Group g = groupMappings.get(groupId);
    ExchangeState state = stateMappings.get(groupId);
    state.registerHandler(aHandler);
    CompletableFuture<Void> res = broadcast(g);
    CompletableFuture<BigInteger> future = res.thenCompose(s -> compute(g));
    long timer[] = new long[1];
    timer[0] = vertx.setTimer(conf.getExchangeTimeout(), id -> {
        if (future.isDone() && !future.isCompletedExceptionally()) {
            aHandler.handle(Future.succeededFuture());
            vertx.cancelTimer(timer[0]);
        } else {
            aHandler.handle(Future.failedFuture(Constants.EXCEPTIONTIMEOUTEXCEEDED + Constants.NEGO_TIMEOUT));
            future.completeExceptionally(
                    new TimeoutException(Constants.EXCEPTIONTIMEOUTEXCEEDED + conf.getExchangeTimeout()));
            vertx.cancelTimer(timer[0]);
        }
    });
    future.exceptionally(e -> {
        aHandler.handle(Future.failedFuture(e.getMessage()));
        vertx.cancelTimer(timer[0]);
        return future.join();
    });

    return future;
}
 
開發者ID:maxamel,項目名稱:GDH,代碼行數:38,代碼來源:GDHVertex.java

示例4: sendNext

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private CompletableFuture<List<SmtpResponse>> sendNext(CompletableFuture<List<SmtpResponse>> prevFuture, Iterator<Object> iterator) {
  if (!iterator.hasNext()) {
    return prevFuture;
  }

  return prevFuture.thenCompose(responses -> {
    if (SmtpResponses.isError(responses.get(responses.size() - 1))) {
      return CompletableFuture.completedFuture(responses);
    }

    Object nextObject = iterator.next();

    CompletableFuture<List<SmtpResponse>> f = writeObjectsAndCollectResponses(1, nextObject)
        .thenApply(mergeResponses(responses));

    return sendNext(f, iterator);
  });
}
 
開發者ID:HubSpot,項目名稱:NioSmtpClient,代碼行數:19,代碼來源:SmtpSession.java

示例5: flatMapConstN

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Benchmark
public String flatMapConstN() throws InterruptedException, ExecutionException {
  CompletableFuture<String> f = constFuture;
  for (int i = 0; i < N.n; i++)
    f = f.thenCompose(flatMapF);
  return f.get();
}
 
開發者ID:traneio,項目名稱:future,代碼行數:8,代碼來源:JavaSyncFutureBenchmark.java

示例6: push0

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
private static CompletableFuture<?> push0(AbstractService service,
                                          String projectName, String repositoryName,
                                          Revision normalizedRev, Author author,
                                          String commitSummary, String commitDetail, Markup commitMarkup,
                                          Change<?> change) {
    final CompletableFuture<Map<String, Change<?>>> f = normalizeChanges(
            service.projectManager(), projectName, repositoryName, normalizedRev, ImmutableList.of(change));

    return f.thenCompose(
            changes -> service.execute(
                    Command.push(author, projectName, repositoryName, normalizedRev,
                                 commitSummary, commitDetail, commitMarkup, changes.values())));
}
 
開發者ID:line,項目名稱:centraldogma,代碼行數:14,代碼來源:RepositoryUtil.java

示例7: flatMapPromise

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Benchmark
public String flatMapPromise() throws InterruptedException, ExecutionException {
  CompletableFuture<String> p = new CompletableFuture<String>();
  p.thenCompose(flatMapF);
  p.complete(string);
  return p.get();
}
 
開發者ID:traneio,項目名稱:future,代碼行數:8,代碼來源:JavaSyncFutureBenchmark.java

示例8: login

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
public CompletableFuture<TaggedResponse> login(String userName, String authToken, AuthMechanism authMechanism) {
  CompletableFuture<? extends ImapResponse> loginFuture;
  switch (authMechanism) {
    case XOAUTH2:
      loginFuture = oauthLogin(userName, authToken);
      break;
    case PLAIN:
      loginFuture = authPlain(userName, authToken);
      break;
    default:
      loginFuture = passwordLogin(userName, authToken);
      break;
  }

  return loginFuture.thenCompose(response -> {
    if (response instanceof ContinuationResponse) {
      ContinuationResponse continuationResponse = ((ContinuationResponse) response);
      return this.<TaggedResponse>send(ImapCommandType.BLANK).thenApply(blankResponse -> {
        throw AuthenticationFailedException.fromContinuation(blankResponse.getMessage(), continuationResponse.getMessage());
      });
    }

    TaggedResponse taggedResponse = ((TaggedResponse) response);

    if (taggedResponse.getCode() == ResponseCode.OK) {
      startKeepAlive();
      return CompletableFuture.completedFuture(taggedResponse);
    }

    CompletableFuture<TaggedResponse> future = new CompletableFuture<>();
    future.completeExceptionally(new AuthenticationFailedException(response.getMessage()));
    return future;
  });
}
 
開發者ID:HubSpot,項目名稱:NioImapClient,代碼行數:35,代碼來源:ImapClient.java

示例9: testThenComposeAsync

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
public void testThenComposeAsync() throws Exception {
    // Composing CompletableFuture is complete
    CompletableFuture<String> cf1 = CompletableFuture.completedFuture("one");

    // Composing function returns a CompletableFuture executed asynchronously
    CountDownLatch cdl = new CountDownLatch(1);
    CompletableFuture<String> cf2 = cf1.thenCompose(str -> CompletableFuture.supplyAsync(() -> {
        while (true) {
            try {
                cdl.await();
                break;
            }
            catch (InterruptedException e) {
            }
        }
        return str + ", two";
    }));

    // Ensure returned CompletableFuture completes after call to thenCompose
    // This guarantees that any premature internal completion will be
    // detected
    cdl.countDown();

    String val = cf2.get();
    Assert.assertNotNull(val);
    Assert.assertEquals(val, "one, two");
}
 
開發者ID:lambdalab-mirror,項目名稱:jdk8u-jdk,代碼行數:28,代碼來源:ThenComposeAsyncTest.java

示例10: commit

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Commits a transaction.
 *
 * @param transactionId transaction identifier
 * @param transactionParticipants set of transaction participants
 * @return future for commit result
 */
CompletableFuture<CommitStatus> commit(TransactionId transactionId,
                                       Set<TransactionParticipant> transactionParticipants) {
    int totalUpdates = transactionParticipants.stream()
                                              .map(TransactionParticipant::totalUpdates)
                                              .reduce(Math::addExact)
                                              .orElse(0);

    if (totalUpdates == 0) {
        return CompletableFuture.completedFuture(CommitStatus.SUCCESS);
    } else if (totalUpdates == 1) {
        return transactionParticipants.stream()
                                      .filter(p -> p.totalUpdates() == 1)
                                      .findFirst()
                                      .get()
                                      .prepareAndCommit()
                                      .thenApply(v -> v ? CommitStatus.SUCCESS : CommitStatus.FAILURE);
    } else {
        CompletableFuture<CommitStatus> status =  transactions.put(transactionId, Transaction.State.PREPARING)
                .thenCompose(v -> this.doPrepare(transactionParticipants))
                .thenCompose(result -> result
                        ? transactions.put(transactionId, Transaction.State.COMMITTING)
                                      .thenCompose(v -> doCommit(transactionParticipants))
                                      .thenApply(v -> CommitStatus.SUCCESS)
                        : transactions.put(transactionId, Transaction.State.ROLLINGBACK)
                                      .thenCompose(v -> doRollback(transactionParticipants))
                                      .thenApply(v -> CommitStatus.FAILURE));
        return status.thenCompose(v -> transactions.remove(transactionId).thenApply(u -> v));
    }
}
 
開發者ID:shlee89,項目名稱:athena,代碼行數:37,代碼來源:TransactionCoordinator.java

示例11: flatMapPromiseN

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Benchmark
public String flatMapPromiseN() throws InterruptedException, ExecutionException {
  CompletableFuture<String> p = new CompletableFuture<>();
  CompletableFuture<String> f = p;
  for (int i = 0; i < N.n; i++)
    f = f.thenCompose(flatMapF);
  p.complete(string);
  return f.get();
}
 
開發者ID:traneio,項目名稱:future,代碼行數:10,代碼來源:JavaSyncFutureBenchmark.java

示例12: indirectClientIsFirstClientAvailable

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Test
public void indirectClientIsFirstClientAvailable(final TestContext testContext) {
    final Async async = testContext.async();
    final CompletableFuture<HttpAction> future = authenticator.authenticate(webContext, Arrays.asList(getIndirectClient()));
    final CompletableFuture<String> requestedUrlFuture = future.thenCompose(a -> {
        assertThat(a, is(notNullValue()));
        assertThat(a.getCode(), is(HttpConstants.TEMP_REDIRECT));
        assertThat(responseHeaders.get(HttpConstants.LOCATION_HEADER), is(AUTH_REDIRECT_URL));
        return webContext.getSessionStore().get(webContext, Pac4jConstants.REQUESTED_URL);
    });
    assertSuccessfulEvaluation(requestedUrlFuture, s -> {
        assertThat(s, is(MockAsyncWebContextBuilder.DEFAULT_FULL_REQUEST_URL));
    }, async);
}
 
開發者ID:millross,項目名稱:pac4j-async,代碼行數:15,代碼來源:AsyncDirectAuthFailedAuthenticatorTest.java

示例13: create

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
@Override
public CompletableFuture<U> create(final C credentials, final AsyncWebContext context) {
    try {
        final CompletableFuture<T> tokenFuture = new CompletableFuture<>();
        try {
            tokenFuture.complete(getAccessToken(credentials));
        } catch (HttpAction action) {
            tokenFuture.completeExceptionally(action);
        }
        return tokenFuture.thenCompose(this::retrieveUserProfileFromToken);
    } catch (final OAuthException e) {
        throw new TechnicalException(e);
    }
}
 
開發者ID:millross,項目名稱:pac4j-async,代碼行數:15,代碼來源:AsyncOAuthProfileCreator.java

示例14: save

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Save the given user profile (replace the current one if multi profiles are not supported, add it otherwise).
 *
 * @param saveInSession if the user profile must be saved in session
 * @param profile a given user profile
 * @param multiProfile whether multiple profiles are supported
 */
public CompletableFuture<Void> save(final boolean saveInSession, final U profile, final boolean multiProfile) {

    final String clientName = retrieveClientName(profile);

    final CompletableFuture<Map<String, U>> profilesFuture;
    if (multiProfile) {
        profilesFuture = retrieveAll(saveInSession).thenApply(profiles -> {
            profiles.remove(clientName);
            return profiles;
        });
    } else {
        profilesFuture = completedFuture(new LinkedHashMap<String, U>());
    }

    final CompletableFuture<Map<String, U>> updatedProfilesFuture = profilesFuture.thenApply(profiles -> {
        profiles.put(clientName, profile);
        return profiles;
    });

    return updatedProfilesFuture.thenCompose(profiles -> {
        CompletableFuture<Void> saveFuture = (saveInSession ?
                this.context.getSessionStore().set(context, USER_PROFILES, profiles) :
                completedFuture(null))
                    .thenAccept(v -> this.context.setRequestAttribute(USER_PROFILES, profiles));
                return saveFuture;
    });

}
 
開發者ID:millross,項目名稱:pac4j-async,代碼行數:36,代碼來源:AsyncProfileManager.java

示例15: retrieveAll

import java.util.concurrent.CompletableFuture; //導入方法依賴的package包/類
/**
 * Retrieve the map of profiles from the session or the request.
 *
 * @param readFromSession if the user profiles must be read from session
 * @return the map of profiles
 */
protected CompletableFuture<Map<String, U>> retrieveAll(final boolean readFromSession) {
    final Map<String, U> profiles = new LinkedHashMap<>();
    final Object request = this.context.getRequestAttribute(USER_PROFILES);
    if (request != null) {
        if  (request instanceof Map) {
            profiles.putAll((Map<String, U>) request);
        }
        if (request instanceof CommonProfile) {
            profiles.put(retrieveClientName((U) request), (U) request);
        }
    }
    if (readFromSession) {
        final CompletableFuture<Object> sessionAttributeFuture = this.context.getSessionStore().get(context, USER_PROFILES);
        return sessionAttributeFuture.thenCompose(sessionAttribute -> {
            final CompletableFuture<Map<String, U>> future = new CompletableFuture<>();
            this.context.getExecutionContext().runOnContext(() -> {
                if  (sessionAttribute instanceof Map) {
                    profiles.putAll((Map<String, U>) sessionAttribute);
                }
                if (sessionAttribute instanceof CommonProfile) {
                    profiles.put(retrieveClientName((U) sessionAttribute), (U) sessionAttribute);
                }
                future.complete(profiles);
            });
            return future;
        });

    } else {
        return completedFuture(profiles);
    }
}
 
開發者ID:millross,項目名稱:pac4j-async,代碼行數:38,代碼來源:AsyncProfileManager.java


注:本文中的java.util.concurrent.CompletableFuture.thenCompose方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。