请考虑以下代码:
void tryToOpenSafe() {
getCorrectSafeCombination().subscribe(combination -> System.out.println("Correct combination is " + combination));
}
Maybe getCorrectSafeCombination() {
return getPossibleCombinations()
.toObservable()
.flatMapIterable(combinations -> combinations)
.flatMap(combination -> tryToOpenSafeWithCombination(combination).toObservable()
.map(isCorrect -> new CombinationCheckResult(combination, isCorrect)))
.filter(result -> result.isCorrect)
.map(result -> result.combination)
.firstElement();
}
Single> getPossibleCombinations() {
final List combinations = Arrays.asList(123, 456, 789, 321);
return Single.just(combinations);
}
// this is expensive
final Single tryToOpenSafeWithCombination(int combination) {
System.out.println("Trying to open safe with " + combination);
final boolean isCorrectCombination = combination == 789;
return Single.just(isCorrectCombination);
}
我收到一个可能的“组合”(整数)列表,我想打开一个安全.当然,只有一种组合是正确的.
使用我当前的方法,getCorrectSafeCombination()将提供它找到的第一个正确的组合;但它会尝试所有的组合.
这是有效的:只要找到正确的组合,就不需要尝试其他组合.
如何用Rx完成?