/* * 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: *

* * @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 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 decider) default Blocks.repeatUntil; }