getFirst and getLast on Iterable (original) (raw)
Brian Goetz brian.goetz at oracle.com
Wed Apr 23 17:01:13 UTC 2014
- Previous message: getFirst and getLast on Iterable
- Next message: getFirst and getLast on Iterable
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Didn’t we just discuss this like a week ago?
http://mail.openjdk.java.net/pipermail/core-libs-dev/2014-April/026506.html
On Apr 17, 2014, at 12:30 AM, Otávio Gonçalves de Santana <otaviopolianasantana at gmail.com> wrote:
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 source = Arrays.asList(1, 2, 3, 4); + int first = source.getFirst(); + assertEquals(first, 1); + + List emptySource = Collections.emptyList(); + assertNull(emptySource.getFirst()); + } + + public void testgetFirstWithDefaultElement() { + + List source = Arrays.asList(1, 2, 3, 4); + Integer defaultElement = 5; + assertEquals(source.getFirst(defaultElement), Integer.valueOf(1)); + + List emptySource = Collections.emptyList(); + assertEquals(emptySource.getFirst(defaultElement), defaultElement); + + } + + public void testgetLast() { + + List source = Arrays.asList(1, 2, 3, 4); + int last = source.getLast(); + assertEquals(last, 4); + + List emptySource = Collections.emptyList(); + assertNull(emptySource.getLast()); + } + + public void testgetLastWithDefaultElement() { + + List source = Arrays.asList(1, 2, 3, 4); + Integer defaultElement = 5; + assertEquals(source.getLast(defaultElement), Integer.valueOf(4)); + + List emptySource = Collections.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 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
- Previous message: getFirst and getLast on Iterable
- Next message: getFirst and getLast on Iterable
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]