--- /dev/null 2011-08-08 08:40:49.685541141 -0700
+++ new/src/share/classes/java/util/functions/Block.java 2011-08-09 10:55:24.000000000 -0700
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation. Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package java.util.functions;
+
+/**
+ * Performs operations upon an input object which may modify that object and/or
+ * external state (other objects).
+ *
+ *
All block implementations are expected to:
+ *
+ * - When used for aggregate operations upon many elements blocks
+ * should not assume that the {@code apply} operation will be called upon
+ * elements in any specific order.
+ *
+ *
+ * @param The type of input objects to {@code apply}.
+ */
+public interface Block {
+
+ /**
+ * Performs operations upon the provided object which may modify that object
+ * and/or external state.
+ *
+ * @param t an input object
+ */
+ void apply(T t);
+
+ /**
+ * Returns a Block which performs in sequence the {@code apply} methods of
+ * multiple Blocks. This Block's {@code apply} method is performed followed
+ * by the {@code apply} method of the specified Block operation.
+ *
+ * @param second an additional Block which will be chained after this Block
+ * @return a Block which performs in sequence the {@code apply} method of
+ * this Block and the {@code apply} method of the specified Block operation
+ */
+ > Block chain(B second) default Blocks.chain;
+
+ /**
+ * Returns a Block which performs in sequence the {@code apply} methods of
+ * multiple Blocks. This Block's {@code apply} method is performed followed
+ * by the {@code apply} methods of the specified Block operations.
+ *
+ * @param sequence additional Blocks which will be chained after this Block
+ * @return a Block which performs in sequence the {@code apply} method of
+ * this Block and the {@code apply} methods of the specified Block
+ * operations
+ */
+ > Block chain(B... sequence) default Blocks.chain;
+
+ /**
+ * Returns a Block which performs in sequence the {@code apply} methods of
+ * multiple Blocks. This Block's {@code apply} method is performed followed
+ * by the {@code apply} methods of the specified Block operations.
+ *
+ * @param sequence additional Blocks which will be chained after this Block
+ * @return a Block which performs in sequence the {@code apply} method of
+ * this Block and the {@code apply} methods of the specified Block
+ * operations
+ */
+ > Block chain(Iterable sequence) default Blocks.chain;
+
+ /**
+ * Returns a Block which repeatedly performs the {@code apply} method of
+ * this Block.
+ *
+ * @param count number of repetitions of the {@code apply} method to perform.
+ * @return a Block which repeatedly performs the {@code apply} method of
+ * this Block.
+ */
+ Block repeat(int count) default Blocks.repeat;
+
+ /**
+ * Returns a Block which repeatedly performs the {@code apply} method of
+ * this Block. The repetitions are terminated when the provided predicate
+ * returns {@code false}. The predicate is tested before each iteration.
+ *
+ * @param count number of repetitions of the {@code apply} method to perform.
+ * @return a Block which repeatedly performs the {@code apply} method of
+ * this Block.
+ */
+ Block repeatWhile(Predicate super T> decider) default Blocks.repeatWhile;
+
+ /**
+ * Returns a Block which repeatedly performs the {@code apply} method of
+ * this Block. The repetitions are terminated when the provided predicate
+ * returns {@code false}. The predicate is tested after each iteration.
+ *
+ * @param count number of repetitions of the {@code apply} method to perform.
+ * @return a Block which repeatedly performs the {@code apply} method of
+ * this Block.
+ */
+ Block repeatUntil(Predicate super T> decider) default Blocks.repeatUntil;
+}