定制收集器可以这样写:
public static <T> Collector<T, ?, List<T>> lastN(int n) { return Collector.<T, Deque<T>, List<T>>of(ArrayDeque::new, (acc, t) -> { if(acc.size() == n) acc.pollFirst(); acc.add(t); }, (acc1, acc2) -> { while(acc2.size() < n && !acc1.isEmpty()) { acc2.addFirst(acc1.pollLast()); } return acc2; }, ArrayList::new);}并像这样使用它:
List<String> lastTen = input.stream().collect(lastN(10));



