Вот реализация, которая отправляет все задачи, а затем получает результаты, возвращая первый true
результат:
private static boolean validateSMTP(final ArrayList<String> mxList, String address)
throws ExecutionException, InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(mxList.size());
return mxList.stream()
.map(mx -> createAsyncVerifier(mx, address, pool))
.collect(Collectors.toList())
.stream()
.map(CompletableFuture<Boolean>::join)
.filter(b -> b)
.findFirst()
.orElse(Boolean.FALSE);
}
.collect(Collectors.toList())
обеспечивает отправку всех задач. Во втором потоке вызывается join
, но это не вызывает ненужных ожиданий, поскольку все задачи уже отправлены.
findFirst
вернется, как только первый элемент пройдет фильтр.