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" <[email protected]>
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
>

Reply via email to