getFirst and getLast on Iterable (original) (raw)
Vitaly Davidovich vitalyd at gmail.com
Thu Apr 17 13:21:26 UTC 2014
- Previous message: getFirst and getLast on Iterable
- Next message: getFirst and getLast on Iterable
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
getLast is a bit dangerous since the sequence can be infinite. Both getFirst and getLast (ignoring infinite sequences) seem too trivial to provide in the JDK, IMHO.
Sent from my phone On Apr 17, 2014 7:53 AM, "Otávio Gonçalves de Santana" <otaviojava at java.net> 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 ]