Java method that returns a function?

ewall picture ewall · Apr 12, 2015 · Viewed 24.4k times · Source

I'm using Guava collections' transform functions, and finding myself making a lot of anonymous functions like this pseudocode:

    Function<T, R> TransformFunction = new Function<T, R>() {
        public R apply(T obj) {
            // do what you need to get R out of T
            return R;
        }
    };

...but since I need to reuse some of them, I'd like to put the frequent ones into a class for easy access.

I'm embarrassed to say (since I don't use Java much), I can't figure out how to make a class method return a function like this. Can you?

Answer

satnam picture satnam · Apr 12, 2015

I think what you want to do is make a public static function that you can re-use throughout your code.

For example:

  public static final Function<Integer, Integer> doubleFunction = new Function<Integer, Integer>() {
    @Override
    public Integer apply(Integer input) {
      return input * 2;
    }
  };

Or if you want to be cool and use lambdas

public static final Function<Integer, Integer> doubleFunction = input -> input * 2;