您的
getX()方法可以看作是接受DataStore实例并返回浮点数的Function。
在Java 8中,您可以使用方法引用来表示它们:
float[] aArray = getValuesAsArray(dataMap, DataStore::getA); float[] bArray = getValuesAsArray(dataMap, DataStore::getB); float[] cArray = getValuesAsArray(dataMap, DataStore::getC);
然后,您
getValuesAsArray将接受一个
Function<DataStore,Float>参数并执行功能:
private static float[] getValuesAsArray(Map<Integer, DataStore> dataMap, Function<DataStore,Float> func) { int i = 0; int nMap = dataMap.size(); float[] fArray = new float[nMap]; for (Map.Entry<Integer, DataStore> entry : dataMap.entrySet()) { DataStore ds = entry.getValue(); fArray[i] = func.apply(ds); i++; } return fArray;}在不使用Java 8的情况下,您可以定义自己的接口,该接口包含一个接受
DataStore实例并返回的方法
float。然后,您不必使用Java
8方法引用,而必须将
getValuesAsArray调用其中一个
getX()方法的该接口的实现(可以使用实现该接口的匿名类实例)传递给您的方法。
例如 :
public interface ValueGetter{ public float get (DataStore source);}float[] aArray = getValuesAsArray(dataMap, new ValueGetter() {public float get (DataStore source) {return source.getA();}});float[] bArray = getValuesAsArray(dataMap, new ValueGetter() {public float get (DataStore source) {return source.getB();}});float[] cArray = getValuesAsArray(dataMap, new ValueGetter() {public float get (DataStore source) {return source.getC();}});和
private static float[] getValuesAsArray(Map<Integer, DataStore> dataMap, ValueGetter func) { int i = 0; int nMap = dataMap.size(); float[] fArray = new float[nMap]; for (Map.Entry<Integer, DataStore> entry : dataMap.entrySet()) { DataStore ds = entry.getValue(); fArray[i] = func.get(ds); i++; } return fArray;}


