重复流allMatch()直到true

时间:2017-05-29 11:21:32

标签: java java-8

int testValue;
boolean success = false;

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

return testValue;

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

2 个答案:

答案 0 :(得分:14)

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

return IntStream.generate (() -> generateRandomInt())
                .filter (i -> mySystem.getHosts().parallelStream().allMatch(predicate(i)))
                .findFirst()
                .getAsInt();

答案 1 :(得分:8)

您可以使用jdk-9 s takeWhile(当它可用时)执行此操作:

  Stream.generate(() -> generateRandomInt())
        .takeWhile(x -> mySystem.getHosts().parallelStream().allMatch(predicate(x)))
        .findAny()
        .get();
相关问题