I would to add for news methods on Iterable, I believe it will helpful for many Java Developers.
diff -r 3dd165facde7 test/java/util/Iterator/IteratorDefaults.java --- a/test/java/util/Iterator/IteratorDefaults.java Wed Apr 09 12:26:00 2014 -0700 +++ b/test/java/util/Iterator/IteratorDefaults.java Wed Apr 16 23:25:56 2014 -0300 @@ -399,6 +399,48 @@ } } + public void testgetFirst() { + + List<Integer> source = Arrays.asList(1, 2, 3, 4); + int first = source.getFirst(); + assertEquals(first, 1); + + List<String> emptySource = Collections.<String>emptyList(); + assertNull(emptySource.getFirst()); + } + + public void testgetFirstWithDefaultElement() { + + List<Integer> source = Arrays.asList(1, 2, 3, 4); + Integer defaultElement = 5; + assertEquals(source.getFirst(defaultElement), Integer.valueOf(1)); + + List<Integer> emptySource = Collections.<Integer>emptyList(); + assertEquals(emptySource.getFirst(defaultElement), defaultElement); + + } + + public void testgetLast() { + + List<Integer> source = Arrays.asList(1, 2, 3, 4); + int last = source.getLast(); + assertEquals(last, 4); + + List<String> emptySource = Collections.<String>emptyList(); + assertNull(emptySource.getLast()); + } + + public void testgetLastWithDefaultElement() { + + List<Integer> source = Arrays.asList(1, 2, 3, 4); + Integer defaultElement = 5; + assertEquals(source.getLast(defaultElement), Integer.valueOf(4)); + + List<Integer> emptySource = Collections.<Integer>emptyList(); + assertEquals(emptySource.getLast(defaultElement), defaultElement); + + } + static class IteratorWithRemove implements Iterator { public boolean removed; diff -r 3dd165facde7 src/share/classes/java/lang/Iterable.java --- a/src/share/classes/java/lang/Iterable.java Wed Apr 09 12:26:00 2014 -0700 +++ b/src/share/classes/java/lang/Iterable.java Wed Apr 16 23:16:21 2014 -0300 @@ -100,4 +100,55 @@ default Spliterator<T> spliterator() { return Spliterators.spliteratorUnknownSize(iterator(), 0); } + + + /** + * returns the first element, if empty will return {@code null} + * @return the first element or {@code null} + * @since 1.8 + */ + default T getFirst() { + return getFirst(null); + } + + /** + * returns the first element, if empty will return the default + * @param defaultValue - the default value to return if the iterable is empty + * @return the first element or default element + * @since 1.8 + */ + default T getFirst(T defaultValue) { + for (T element : this) { + return element; + } + return defaultValue; + } + + /** + * returns the last element, if empty will return {@code null} + * @return the first element or {@code null} + * @since 1.8 + */ + default T getLast() { + + return getLast(null); + } + + /** + * returns the last element, if empty will return the default + * @param defaultValue - the default value to return if the iterable is empty + * @return the last element or default element + * @since 1.8 + */ + default T getLast(T defaultValue) { + + T last = null; + for (T element : this) { + last = element; + } + if (Objects.isNull(last)) { + return defaultValue; + } + return last; + } } -- Atenciosamente. Otávio Gonçalves de Santana blog: http://otaviosantana.blogspot.com.br/ twitter: http://twitter.com/otaviojava site: http://www.otaviojava.com.br (11) 98255-3513