getFirst and getLast on Iterable

Brian Goetz brian.goetz at oracle.com
Wed Apr 23 17:01:13 UTC 2014


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<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