getFirst and getLast on Iterable

Vitaly Davidovich vitalyd at gmail.com
Thu Apr 17 13:21:26 UTC 2014


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