Это возможно в java-9 с помощью (я упростил ваш пример):
Stream.of(1, 2, 3, 4, 5, 6)
.dropWhile(x -> x != 2)
.takeWhile(x -> x != 6)
.skip(1)
.forEach(System.out::println);
Это позволит получить значения в диапазоне 2 - 6
, то есть вывести 3,4,5
.
Или для вашего примера:
employees.stream()
.dropWhile(e -> e.getLastname().equals("xxx"))
.takeWhile(e -> e.getLastname().equals("yyy"))
.skip(1)
.forEach(....)
Есть задние порты для dropWhile
и takeWhile
, см. здесь и здесь
РЕДАКТИРОВАТЬ
Или вы можете сначала получить индексы этих разделителей, а затем сделать subList
(но это предполагает, что xxx
и yyy
уникальныв списке сотрудников):
int[] indexes = IntStream.range(0, employees.size())
.filter(x -> list.get(x).getLastname().equals("xxx") || list.get(x).getLastname().equals("yyy"))
.toArray();
employees.subList(indexes[0] + 1, indexes[1])
.forEach(System.out::println);