@Override
 public OptionalDouble average() {
   long[] results =
       performOperation(
           TerminalFunctions.averageIntFunction(),
           true,
           (a1, a2) -> {
             a1[0] += a2[0];
             a1[1] += a2[1];
             return a1;
           },
           null);
   if (results[1] > 0) {
     return OptionalDouble.of((double) results[0] / results[1]);
   } else {
     return OptionalDouble.empty();
   }
 }