Return-Path: X-Original-To: apmail-brooklyn-commits-archive@minotaur.apache.org Delivered-To: apmail-brooklyn-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E3436179C6 for ; Wed, 1 Oct 2014 13:57:34 +0000 (UTC) Received: (qmail 61173 invoked by uid 500); 1 Oct 2014 13:57:34 -0000 Delivered-To: apmail-brooklyn-commits-archive@brooklyn.apache.org Received: (qmail 61149 invoked by uid 500); 1 Oct 2014 13:57:34 -0000 Mailing-List: contact commits-help@brooklyn.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@brooklyn.incubator.apache.org Delivered-To: mailing list commits@brooklyn.incubator.apache.org Received: (qmail 61104 invoked by uid 99); 1 Oct 2014 13:57:34 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Oct 2014 13:57:34 +0000 X-ASF-Spam-Status: No, hits=-1999.6 required=5.0 tests=ALL_TRUSTED,HK_RANDOM_FROM,RP_MATCHES_RCVD X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO mail.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with SMTP; Wed, 01 Oct 2014 13:57:12 +0000 Received: (qmail 60328 invoked by uid 99); 1 Oct 2014 13:57:10 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 01 Oct 2014 13:57:10 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 7EDB4882A3F; Wed, 1 Oct 2014 13:57:10 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: grkvlt@apache.org To: commits@brooklyn.incubator.apache.org Date: Wed, 01 Oct 2014 13:57:10 -0000 Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: [1/2] git commit: Added presentInstances method to Maybe X-Virus-Checked: Checked by ClamAV on apache.org Repository: incubator-brooklyn Updated Branches: refs/heads/master 6fa0d22ce -> ff3870777 Added presentInstances method to Maybe Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/2b376156 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/2b376156 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/2b376156 Branch: refs/heads/master Commit: 2b376156cd541edbc9946fdf37b08cb0b9386db5 Parents: bbe2940 Author: Andrew Kennedy Authored: Wed Oct 1 14:54:31 2014 +0100 Committer: Andrew Kennedy Committed: Wed Oct 1 14:55:34 2014 +0100 ---------------------------------------------------------------------- .../main/java/brooklyn/util/guava/Maybe.java | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/2b376156/utils/common/src/main/java/brooklyn/util/guava/Maybe.java ---------------------------------------------------------------------- diff --git a/utils/common/src/main/java/brooklyn/util/guava/Maybe.java b/utils/common/src/main/java/brooklyn/util/guava/Maybe.java index 07da835..41d7a06 100644 --- a/utils/common/src/main/java/brooklyn/util/guava/Maybe.java +++ b/utils/common/src/main/java/brooklyn/util/guava/Maybe.java @@ -18,6 +18,8 @@ */ package brooklyn.util.guava; +import static com.google.common.base.Preconditions.checkNotNull; + import java.io.Serializable; import java.lang.ref.SoftReference; import java.util.Collections; @@ -29,10 +31,12 @@ import javax.annotation.Nullable; import brooklyn.util.javalang.JavaClassNames; +import com.google.common.annotations.Beta; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Supplier; +import com.google.common.collect.AbstractIterator; import com.google.common.collect.ImmutableSet; /** Like Guava Optional but permitting null and permitting errors to be thrown. */ @@ -160,6 +164,35 @@ public abstract class Maybe implements Serializable, Supplier { }; return absent(); } + + /** + * Returns the value of each present instance from the supplied {@code maybes}, in order, + * skipping over occurrences of {@link Maybe#absent()}. Iterators are unmodifiable and are + * evaluated lazily. + * + * @see Optional#presentInstances(Iterable) + */ + @Beta + public static Iterable presentInstances(final Iterable> maybes) { + checkNotNull(maybes); + return new Iterable() { + @Override + public Iterator iterator() { + return new AbstractIterator() { + private final Iterator> iterator = checkNotNull(maybes.iterator()); + + @Override + protected T computeNext() { + while (iterator.hasNext()) { + Maybe maybe = iterator.next(); + if (maybe.isPresent()) { return maybe.get(); } + } + return endOfData(); + } + }; + } + }; + } public static class Absent extends Maybe { private static final long serialVersionUID = -757170462010887057L;