Functions.java

  1. /*
  2.  * Licensed to the Apache Software Foundation (ASF) under one or more
  3.  * contributor license agreements.  See the NOTICE file distributed with
  4.  * this work for additional information regarding copyright ownership.
  5.  * The ASF licenses this file to You under the Apache License, Version 2.0
  6.  * (the "License"); you may not use this file except in compliance with
  7.  * the License.  You may obtain a copy of the License at
  8.  *
  9.  *      http://www.apache.org/licenses/LICENSE-2.0
  10.  *
  11.  * Unless required by applicable law or agreed to in writing, software
  12.  * distributed under the License is distributed on an "AS IS" BASIS,
  13.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14.  * See the License for the specific language governing permissions and
  15.  * limitations under the License.
  16.  */

  17. package org.apache.commons.lang3.function;

  18. import java.util.function.Function;

  19. /**
  20.  * Factory for {@link Function}.
  21.  *
  22.  * @since 3.14.0
  23.  */
  24. public final class Functions {

  25.     /**
  26.      * Applies the {@link Function} on the object if the function is not {@code null}. Otherwise, does nothing and returns {@code null}.
  27.      *
  28.      * @param function the function to apply.
  29.      * @param object   the object to apply the function.
  30.      *
  31.      * @param <T>      the type of the argument the function applies.
  32.      * @param <R>      the type of the result the function returns.
  33.      * @return the value the function returns if the function is not {@code null}; {@code null} otherwise.
  34.      * @since 3.15.0
  35.      */
  36.     public static <T, R> R apply(final Function<T, R> function, final T object) {
  37.         return function != null ? function.apply(object) : null;
  38.     }

  39.     /**
  40.      * Starts a fluent chain like {@code function(foo::bar).andThen(...).andThen(...).apply(...);}
  41.      *
  42.      * @param <T>      Input type.
  43.      * @param <R>      Return type.
  44.      * @param function the argument to return.
  45.      * @return the argument
  46.      */
  47.     public static <T, R> Function<T, R> function(final Function<T, R> function) {
  48.         return function;
  49.     }

  50.     private Functions() {
  51.         // no instances needed.
  52.     }
  53. }