getFirst and getLast on Iterable
Otávio Gonçalves de Santana
otaviojava at java.net
Thu Apr 17 11:52:31 UTC 2014
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