Я бы сказал легкий путь, описанный здесь:
http://pandas.pydata.org/pandas-docs/stable/indexing.html#boolean-indexing
df[df['B'] > 10]
Вы можете сделать это, используя CompletionStage.thenCompose(Function)
в сочетании с CompletableFuture.allOf(CompletableFuture...)
. Общая сигнатура Function
, используемая thenCompose
, является: Function<? super T, ? extends CompletionStage<U>>
.
public CompletableFuture<Void> loadAndApply(SomeObject object) {
return loadData().thenCompose(data ->
CompletableFuture.allOf(
CompletableFuture.runAsync(() -> object.setA(processA(data)), swingExecutor),
CompletableFuture.runAsync(() -> object.setB(processB(data)), backgroundExecutor)
) // End of "allOf"
); // End of "thenCompose"
} // End of "loadAndApply"
Это имеет дополнительное преимущество. В коде, который вы используете в настоящее время на этапе thenAcceptAsync
, нужно дождаться завершения этапа thenApplyAsync
до его выполнения. При использовании вышеуказанного оба setA
и setB
будут запускаться одновременно в своих соответствующих исполнителях.
Для удобства здесь Javadoc для allOf
:
Возвращает новый CompletableFuture, который завершается, когда все данные CompletainFutures завершаются. Если какой-либо из заданных CompletableFutures выполняется исключительно, то возвращенный CompletableFuture также делает это, при этом исключение CompletionException содержит это исключение в качестве причины. В противном случае результаты, если таковые имеются, данных CompletableFutures не отражаются в возвращаемом CompletableFuture, но могут быть получены путем их индивидуального осмотра. Если нет CompletableFutures, возвращает CompletableFuture, заполненную нулевым значением.
Среди приложений этого метода заключается в том, чтобы дождаться завершения набора независимых CompletingFutures перед продолжением программы, как в: CompletableFuture.allOf ( c1, c2, c3) .join ();.
... и Javadoc для
thenCompose
:Возвращает новое CompletionStage, которое завершен с тем же значением, что и CompletionStage, возвращаемым данной функцией.
Когда этот этап завершается нормально, данная функция вызывается с результатом этого этапа в качестве аргумента, возвращая другой CompletionStage. Когда этот этап завершается нормально, CompletionStage, возвращаемый этим методом, завершается с тем же значением.
Чтобы обеспечить прогресс, предоставленная функция должна организовать окончательное завершение своего результата.
Этот метод аналогичен опции Optional.flatMap и Stream.flatMap.
См. документацию CompletionStage для правил, охватывающих исключительное завершение.
Примечание:
CompletableFuture
, который реализуетCompletionStage
, переопределяетthenCompose
, но делает тип возврата более конкретным (возвращаетCompletableFuture
, а неCompletionStage
) .
swingExecutor
, не занимает слишком много времени, поэтому преимущество здесь не может быть реализовано). – Slaw 13 July 2018 в 16:42