The solution is not very efficient, but I think it follows your requirements - it does what you want and it is in one single pipeline - one single sequence of bulk data operations, how Java 8 calls it.
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
Stream<Integer> ranges = Stream.iterate(1, i -> i + 1).limit(15);
List<Integer> collect = ranges
.sorted(Comparator.reverseOrder()) // sort the stream from the highest to the smallest
.skip(1) // discards 1 element from the beginning
.sorted() // sort the stream from the smallest to the highest
.skip(1) // discards 1 element from the beginning
.collect(Collectors.toList())
;
But, as fge suggested and Marco13 wrote in their comment below your question, it would be better and much more efficient just to sort the stream, terminate the pipeline to a list and then remove the first and the last member :P Or even faster without sort - go through all the elements, find min and max, remember their position and then remove them.