Повторить поток allMatch() до true
int testValue;
boolean success = false;
while(success == false) {
testValue = generateRandomInt();
success = mySystem.getHosts().parallelStream().allMatch(predicate(testValue));
}
return testValue;
Я играю с потоками java8. Что вы предлагаете сделать код выше более элегантным/читаемым?
Ответы
Ответ 1
Вы можете использовать бесконечный IntStream
вместо цикла while
и вернуть первый int
потока, который соответствует вашему условию:
return IntStream.generate (() -> generateRandomInt())
.filter (i -> mySystem.getHosts().parallelStream().allMatch(predicate(i)))
.findFirst()
.getAsInt();
Ответ 2
Вы можете сделать это с помощью jdk-9
takeWhile
(если доступно):
Stream.generate(() -> generateRandomInt())
.takeWhile(x -> mySystem.getHosts().parallelStream().allMatch(predicate(x)))
.findAny()
.get();