more capable SplitApplyCombine