Repository: commons-collections Updated Branches: refs/heads/master b5b45d326 -> 22daa5f1d
[COLLECTIONS-671] Add org.apache.commons.collections4.IterableUtils.first(Iterable). Project: http://git-wip-us.apache.org/repos/asf/commons-collections/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-collections/commit/22daa5f1 Tree: http://git-wip-us.apache.org/repos/asf/commons-collections/tree/22daa5f1 Diff: http://git-wip-us.apache.org/repos/asf/commons-collections/diff/22daa5f1 Branch: refs/heads/master Commit: 22daa5f1dd4396e94224841b3bf0e9f226e86695 Parents: b5b45d3 Author: Gary Gregory <ggreg...@apache.org> Authored: Wed Jan 10 09:57:27 2018 -0700 Committer: Gary Gregory <ggreg...@apache.org> Committed: Wed Jan 10 09:57:27 2018 -0700 ---------------------------------------------------------------------- src/changes/changes.xml | 3 +++ .../commons/collections4/IterableUtils.java | 16 ++++++++++++++ .../commons/collections4/IterableUtilsTest.java | 22 +++++++++++++++++++- 3 files changed, 40 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-collections/blob/22daa5f1/src/changes/changes.xml ---------------------------------------------------------------------- diff --git a/src/changes/changes.xml b/src/changes/changes.xml index efdd030..d2ae55e 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -81,6 +81,9 @@ <action issue="COLLECTIONS-670" dev="ggregory" type="add" due-to="Gary Gregory"> Add org.apache.commons.collections4.IteratorUtils.first(Iterator). </action> + <action issue="COLLECTIONS-671" dev="ggregory" type="add" due-to="Gary Gregory"> + Add org.apache.commons.collections4.IterableUtils.first(Iterable). + </action> </release> <release version="4.1" date="2015-11-28" description="This is a security and minor release."> <action issue="COLLECTIONS-508" dev="tn" type="add"> http://git-wip-us.apache.org/repos/asf/commons-collections/blob/22daa5f1/src/main/java/org/apache/commons/collections4/IterableUtils.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/collections4/IterableUtils.java b/src/main/java/org/apache/commons/collections4/IterableUtils.java index d87a5a4..d5cb444 100644 --- a/src/main/java/org/apache/commons/collections4/IterableUtils.java +++ b/src/main/java/org/apache/commons/collections4/IterableUtils.java @@ -775,6 +775,22 @@ public class IterableUtils { } /** + * Returns the <code>first</code> value in the <code>iterable</code>'s {@link Iterator}, throwing + * <code>IndexOutOfBoundsException</code> if there is no such element. + * <p> + * If the {@link Iterable} is a {@link List}, then it will use {@link List#get(int)}. + * + * @param <T> the type of object in the {@link Iterable}. + * @param iterable the {@link Iterable} to get a value from, may be null + * @return the first object + * @throws IndexOutOfBoundsException if the request is invalid + * @since 4.2 + */ + public static <T> T first(final Iterable<T> iterable) { + return get(iterable, 0); + } + + /** * Returns the number of elements contained in the given iterator. * <p> * A <code>null</code> or empty iterator returns {@code 0}. http://git-wip-us.apache.org/repos/asf/commons-collections/blob/22daa5f1/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java ---------------------------------------------------------------------- diff --git a/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java b/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java index 494592c..564193b 100644 --- a/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java +++ b/src/test/java/org/apache/commons/collections4/IterableUtilsTest.java @@ -393,17 +393,37 @@ public class IterableUtilsTest { assertTrue(IterableUtils.matchesAll(emptyIterable, lessThanFour)); } - @Test(expected = IndexOutOfBoundsException.class) public void getFromIterable() throws Exception { // Collection, entry exists final Bag<String> bag = new HashBag<>(); bag.add("element", 1); assertEquals("element", IterableUtils.get(bag, 0)); + } + @Test(expected = IndexOutOfBoundsException.class) + public void getFromIterableIndexOutOfBoundsException() throws Exception { + // Collection, entry exists + final Bag<String> bag = new HashBag<>(); + bag.add("element", 1); // Collection, non-existent entry IterableUtils.get(bag, 1); } + public void firstFromIterable() throws Exception { + // Collection, entry exists + final Bag<String> bag = new HashBag<>(); + bag.add("element", 1); + assertEquals("element", IterableUtils.first(bag)); + } + + @Test(expected = IndexOutOfBoundsException.class) + public void firstFromIterableIndexOutOfBoundsException() throws Exception { + // Collection, entry exists + final Bag<String> bag = new HashBag<>(); + // Collection, non-existent entry + IterableUtils.first(bag); + } + @SuppressWarnings("unchecked") @Test public void partition() {