See also Stream.findFirst and findAny. Stream is the place we have and I think we should primarily focus effort on rather than Iterable for such features.
I believe a related feature some have requested is the ability to obtain an only, or at most, one element. On Stream this might manifest as: T findOne(); Optional<T> findAtMostOne(); // See Guava’s MoreCollectors/onlyElement,toOptional [1] which might differ in terms of exceptions thrown compared to other terminal operations. Paul. [1] https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/MoreCollectors.html#onlyElement-- <https://google.github.io/guava/releases/21.0/api/docs/com/google/common/collect/MoreCollectors.html#onlyElement--> > On Jan 30, 2018, at 10:09 PM, Dave Brosius <dbros...@mebigfatguy.com> wrote: > > Basically, but it's > > annoying and ugly to write > > most likely sub-optimal > > has problems with things like synchronized collections > > > On 01/31/2018 12:28 AM, Zheka Kozlov wrote: >> Isn't iterable.getOne() the same as iterable.iterator().next()? >> >> 2018-01-31 12:15 GMT+07:00 Dave Brosius <dbros...@mebigfatguy.com >> <mailto:dbros...@mebigfatguy.com>>: >> >> Greetings, >> >> >> sorry if this has been asked before, but has there been any >> consideration for adding a >> >> default T getOne() { >> >> Iterator<T> it = iterator(); >> if (!it.hasNext()) { >> throw new NoSuchElementException(); >> } >> >> return it.next(); >> } >> >> >> on the Iterable interface? >> >> >> It is often the case you have a collection of some sort (un >> indexed, in this case), where you know there is only one value in >> the collection, or you know for some attribute of all the objects >> in the Iterable, all objects can be thought of as the same, and so >> you just want to get any of the elements. >> >> Having to craft this iterator code is annoying, and it would be >> much nicer to be able to do >> >> String s = mySet.getOne(); >> >> In addition to this, it is likely that most collections could >> implement getOne() more optimally than using the standard iterator >> approach. >> >> Of course i am not stuck on the choice of the name 'getOne' >> anything would do. examplar() ? As we know, naming is always the >> hardest part. >> >> thoughts? >> dave >> >> >