I would like to make more of an effort to use Java 8's functional features and shift my thinking towards that paradigm; however, I'm not quite sure how to reconcile this scenario.

For example I recently wrote something similar to this:

```
public class ExampleClass {

    private ExampleData exampleData;
    private Function<ExampleData, Boolean> workFunction;

    public ExampleData getExampeData() {
        return exampleData;
    }

    public void setExampleData(ExampleData exampleData) {
        this.exampleData = exampleData;
    }

    public Function<ExampleData, Boolean> getWorkFunction() {
        return workFunction;
    }

    public void setWorkFunction(Function<ExampleData, Boolean> workFunction) {
        this.workFunction = workFunction;
    }
}

```

then I proceed to use it like so...

```
public class Worker implements Callable {

    private final ExampleClass exampleClass;

    // ExampleClass serves as a container for the function and it's
    // input data in order to minimize the number of arguments
    // passed to this constructor. Otherwise would be
    // public Worker(ExampleData exampleData, Function<T, R> workFunction, ...) {
    // Note: using "..." here to represent more args.
    public Worker(ExampleClass exampleClass, ...) {
        this.exampleClass = exampleClass;
        ...
    }

    @Override
    public void call() {
        final Boolean isComplete = exampleClass.getWorkFunction().apply(exampleClass.getExampleData());
        if (isComplete) {
            ...
        }
        ...
    }
}

```

Would something like the above be preferred over what I would consider the more traditional approach? 

```
public class ExampleClass {

    private ExampleData exampleData;

    public ExampleClass(ExampleData exampleData) {
        this.exampleData = exampleData;
    }

    public Boolean work() {
          return isComplete(exampleData);
    }
}

```

and the implementing class...

```
public class Worker implements Callable {

    private ExampleClass exampleClass;

    public Worker(ExampleClass exampleClass, ...) {
        this.exampleClass = exampleClass;
        ...
    }

    @Override
    public void call() {
        final Boolean isComplete = exampleClass.work();
        if (isComplete) {
            ...
        }
        ...
    }
}

```

If I'm completely off base, what would be a proper functional solution using Java 8?

**Update:** Lets say my example doesn't return a Boolean. In the context of functional programming with Java 8, is it better to explicitly pass a function as a class level argument or is it better to just use the traditional object oriented way of just passing another class that performs that function?