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 {@code double} operand yielding a {@code double} 31 * result. This is the primitive type specialization of {@link UnaryOperator} 32 * for {@code double}. 33 * 34 * @see UnaryOperator 35 * @since 1.8 36 */ 37 @FunctionalInterface 38 public interface DoubleUnaryOperator { 39 40 /** 41 * Returns the {@code double} result of the operation upon the 42 * {@code double} operand. 43 * 44 * @param operand the operand value 45 * @return the operation result value 46 */ 47 double applyAsDouble(double 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 DoubleUnaryOperator compose(DoubleUnaryOperator before) { 61 Objects.requireNonNull(before); 62 return (double v) -> applyAsDouble(before.applyAsDouble(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 DoubleUnaryOperator andThen(DoubleUnaryOperator after) { 77 Objects.requireNonNull(after); 78 return (double t) -> after.applyAsDouble(applyAsDouble(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 DoubleUnaryOperator identity() { 87 return t -> t; 88 } 89 }