1 /* 2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 package java.util.function; 26 27 import java.util.Objects; 28 29 /** 30 * An operation on a single {@code int} operand yielding an {@code int} result. 31 * This is the primitive type specialization of {@link UnaryOperator} for 32 * {@code int}. 33 * 34 * @see UnaryOperator 35 * @since 1.8 36 */ 37 @FunctionalInterface 38 public interface IntUnaryOperator { 39 40 /** 41 * Returns the {@code int} value result of the operation upon the 42 * {@code int} operand. 43 * 44 * @param operand the operand value 45 * @return the operation result value 46 */ 47 int applyAsInt(int operand); 48 49 /** 50 * Compose a new function which applies the provided function followed by 51 * this function. If either function throws an exception, it is relayed 52 * to the caller. 53 * 54 * @param before an additional function to be applied before this function 55 * is applied 56 * @return a function which performs the provided function followed by this 57 * function 58 * @throws NullPointerException if before is null 59 */ 60 default IntUnaryOperator compose(IntUnaryOperator before) { 61 Objects.requireNonNull(before); 62 return (int v) -> applyAsInt(before.applyAsInt(v)); 63 } 64 65 /** 66 * Compose a new function which applies this function followed by the 67 * provided function. If either function throws an exception, it is relayed 68 * to the caller. 69 * 70 * @param after an additional function to be applied after this function is 71 * applied 72 * @return a function which performs this function followed by the provided 73 * function followed 74 * @throws NullPointerException if after is null 75 */ 76 default IntUnaryOperator andThen(IntUnaryOperator after) { 77 Objects.requireNonNull(after); 78 return (int t) -> after.applyAsInt(applyAsInt(t)); 79 } 80 81 /** 82 * Returns a unary operator that provides its input value as the result. 83 * 84 * @return a unary operator that provides its input value as the result 85 */ 86 static IntUnaryOperator identity() { 87 return t -> t; 88 } 89 }