In this example I accumulate the list into a LinkedList.
The LinkedList implements Deque (Double ended queue) which allows me to append the items in a last-in-first-out (LIFO) order.
I perform the accumulation in the collect method using LinkedList::addFirst which places the items read off the stream at the head of the list.
public static void main(final String... args) {
final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7");
final List<String> reversed = objList.stream()
.collect(LinkedList::new, LinkedList::addFirst, LinkedList::addAll);
//[7, 6, 5, 4, 3, 2, 1]
System.out.println(reversed);
}
The solution below is OK but I don't like having to close over the original list.
public static void main(final String... args) {
final List<String> objList = Arrays.asList("1", "2", "3", "4", "5", "6", "7");
final List<String> reversed = IntStream.range(-(objList.size() - 1), 1)
.mapToObj(i -> objList.get(-i))
.collect(Collectors.toList());
//[7, 6, 5, 4, 3, 2, 1]
System.out.println(reversed);
}