重复Stream allMatch()直到true

Moo*_*lit 12 java java-8

int testValue;
boolean success = false;

while(success == false) {
 testValue = generateRandomInt();   
 success = mySystem.getHosts().parallelStream().allMatch(predicate(testValue));
}

return testValue;
Run Code Online (Sandbox Code Playgroud)

我正在玩java8流.你有什么建议让上面的代码更优雅/可读?

Era*_*ran 14

您可以使用无限IntStream而不是while循环,并返回int符合您条件的第一个流:

return IntStream.generate (() -> generateRandomInt())
                .filter (i -> mySystem.getHosts().parallelStream().allMatch(predicate(i)))
                .findFirst()
                .getAsInt();
Run Code Online (Sandbox Code Playgroud)


Eug*_*ene 8

你可以用jdk-9s takeWhile(当它可用时):

  Stream.generate(() -> generateRandomInt())
        .takeWhile(x -> mySystem.getHosts().parallelStream().allMatch(predicate(x)))
        .findAny()
        .get();
Run Code Online (Sandbox Code Playgroud)