getFirst and getLast on Iterable

Otávio Gonçalves de Santana otaviopolianasantana at gmail.com
Wed Apr 23 18:14:11 UTC 2014


Yes I did a mistake, please ignore.
I sent twice but it had one week as delay.
Sorry
On Apr 23, 2014 2:01 PM, "Brian Goetz" <brian.goetz at oracle.com> wrote:

> 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