Я искал версию с одним заявлением о сборе, хотя она оказалась не такой краткой или изящной, как решение Андреаса. Он использует реализацию Collector
, которая накапливается в одноэлементном списке, в то время как комбинатор вызывает исключение, если у нас более одного элемента; Финишер вызывает исключение, когда список пуст.
list.stream().collect(
Collector.of( ArrayList::new,
(a, t) -> { if (!a.isEmpty())
throw new RuntimeException();
a.add(t); },
(a, b) -> { throw new RuntimeException(); },
a -> { if( a.isEmpty() )
throw new RuntimeException();
return a.get(0);} );