The finisher() method returns a function that is applied at the end of the accumulation process. When this method is invoked, there are no more stream elements to traverse. All of the elements will be accumulated transformed from the intermediate accumulation type, A, to the final result type, R. If no transformation is needed, then we can return the intermediate result (the accumulator itself):
@Override
public Function<Map<Boolean, List<Melon>>,
Map<Boolean, List<Melon>>> finisher() {
return Function.identity();
}