final double[] uniqueExpiries = getUniqueExpiries(volatilitySurface);
final double[] uniqueStrikes = getUniqueStrikes(volatilitySurface);
final Triple<double[], double[][], double[][]> strikesAndValues = getStrikesAndValues(uniqueExpiries, uniqueStrikes, volatilitySurface, minNumberOfStrikes);
// Convert vols and strikes to double[][],
// noting that different expiries may have different populated strikes
return new StandardSmileSurfaceDataBundle(forwardCurve, strikesAndValues.getFirst(), strikesAndValues.getSecond(), strikesAndValues.getThird());
}