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