Google Guava: предикат assertTrue

#java #guava

#java #guava

Вопрос:

Я ищу метод, позволяющий гарантировать, что все объекты, содержащиеся в a Collect ( List ), возвращают указанное значение из предиката.

Псевдокод:

 Collections.assertTrue(List<Ballons>, isBluePredicate)
  

Я не вижу, чтобы это было возможно с текущим API (возможно, я не смотрю в нужном месте)

Если это действительно существует, завершит ли функция работу при первом обнаружении ложного значения?

Ответ №1:

Метод Iterables.all(Iterable, Predicate) является обычным способом сделать это; утверждение должно быть вашим собственным.

Ответ №2:

Сама Guava не имеет никаких утверждений. Если я правильно понял вопрос, вы должны иметь возможность использовать Iterables.all

 assert Iterables.all(balloonsList, isBlue) : "some aren't blue";
  

В документации не уточняется, вычисляется ли предикат для остальных элементов, если один из них приводит к false, но я подозреваю, что этого не будет. Вы можете тривиально проверить источник.

Если вам нужно, чтобы он оценивался для всех элементов, вам следует использовать filter и проверять размер результата.

Комментарии:

1. Это правда. Iterables.all делегирует Iterators.all , который имеет логику короткого замыкания, чтобы возвращать false при первом сбое.