001/* 002 * Copyright (c) 2015-2020, Oracle and/or its affiliates. All rights reserved. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.tribuo.util; 018 019/** 020 * An interface which can merge double values. 021 * <p> 022 * Provides a few obvious stateless examples. 023 */ 024@FunctionalInterface 025public interface Merger { 026 027 /** 028 * Merges first and second. 029 * @param first The first input. 030 * @param second The second input. 031 * @return The merged value. 032 */ 033 public double merge(double first, double second); 034 035 /** 036 * A merger which takes the maximum element. 037 * @return The maximum function. 038 */ 039 public static Merger max() { 040 return Math::max; 041 } 042 043 /** 044 * A merger which takes the minimum element. 045 * @return The minimum function. 046 */ 047 public static Merger min() { 048 return Math::min; 049 } 050 051 /** 052 * A merger which adds the elements. 053 * @return The addition function. 054 */ 055 public static Merger add() { 056 return Double::sum; 057 } 058 059}