На самом деле есть два способа сделать это в Java 8 без каких-либо дополнительных библиотек или с использованием Java 9.
Если вы хотите печатать цифры от 2 до 20 на консоли, вы можете сделать это:
IntStream.iterate(2, (i) -> i + 2).peek(System.out::println).allMatch(i -> i < 20);
или
IntStream.iterate(2, (i) -> i + 2).peek(System.out::println).anyMatch(i -> i >= 20);
Выход в обоих случаях:
2
4
6
8
10
12
14
16
18
20
Пока никто не упомянул anyMatch . Вот почему этот пост.
Соединение, как предполагается, решает n+1 проблему. Если у Вас будет 10 родителей, каждый с 10 детьми, то соединение потребует одного запроса, и выбор потребует 11 (один для родителей и один для детей каждого родителя). Это не может быть грандиозным предприятием, если база данных находится на том же сервере как приложение или если сеть действительно быстра, но если существует задержка в каждом вызове базы данных, это может сложить. Метод соединения немного менее эффективен на начальном запросе, потому что Вы копируете родительские столбцы в каждой строке, но Вы только делаете одно распространение в прямом и обратном направлениях к базе данных.
Обычно, если я знаю, что испытываю необходимость в детях всех родителей, я иду с соединением. Если я только испытываю необходимость в детях нескольких родителей, я использую выбор.
Выбор выберет дочерние объекты путем издания нового запроса к базе данных для них. Соединение выберет дочерние объекты путем присоединения к ним в запрос родителя. Так вот почему Вы видите подобную производительность, даже с понижением количества запросов.
Выбор:
SELECT * FROM parent WHERE id=(whatever)
SELECT * FROM child WHERE id=(parent.child.id)
Соединение:
SELECT *
FROM parent
LEFT OUTER JOIN child ON parent.child.id=child.id
WHERE parent.id=(whatever)
относительно того, когда использовать один по другому... Не цельный уверенный. Это, вероятно, зависит от системы баз данных. Если бы Вы были всегда лучше, чем другой, я сомневаюсь, что они потрудились бы давать Вам опцию! Если бы Вы видите подобную производительность для каждого, я не волновался бы об этом.