Doing streaming operations means you can't use any of the collection features though. I guess I'm having a harder time seeing the value in streaming results when the collection classes are so powerful.

One path that might lead to simpler code is to have ResultSet build the full results on construction, and have a separate streaming resultset that is not a 'Collection'. That might make the buffer/no buffer tradeoffs more explicit and valuable.