getFirst and getLast on Iterable

Otávio Gonçalves de Santana otaviojava at java.net
Thu Apr 17 11:52:31 UTC 2014


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



More information about the core-libs-dev mailing list