Utilizando un método como parámetro para otro método de procesamiento de Java * *

Matvey Ryabov:

Hola estoy trabajando en un método que se aplicaría una función (matemáticas tales como f (x) = 3x + 2) a cada elemento de una matriz. Planeo en tener esta función ser dinámica y que tiene la capacidad de ser cambiado dependiendo del ejemplo sin cambiar el código (la conmutación entre diferentes fórmulas). Quiero almacenar cada una de estas funciones matemáticas (fórmulas) en los métodos separados que serían llamados de un método principal - mapFunc. mapFunc tendría dos parámetros: la matriz que se está RAN a través de la fórmula, y el método que contiene la función matemática elegido. Esto es para que al llamar al método mapFunc en mi bucle principal, que sería capaz de escribir mapFunc (miMatriz, myFormula ()). myFormula es un método. En Java 8.0 Me gustaría ser capaz de utilizar una expresión lambda y otras referencias de métodos a utilizar myFormula () como un argumento a mapFunc (). Sin embargo, ya estoy usando el procesamiento de software que admite sólo Java7.0 totalmente, soy incapaz de usar expresiones lambda y otras características incluidas en Java8.0. Quiero tener un método como este:

void mapFunction(float[][] data, myFormula()) {
    for (int i = 0; i < data.length; i++) {
        for(int j = 0; j < data[0].length; j++) {
        data[i][j] = myFormula(data[i][j]));
        }
    }
 }

En javascript que sería capaz de escribir:

map(func) {
// Apply a function to every element of matrix
for (let i = 0; i < this.rows; i++) {
  for (let j = 0; j < this.cols; j++) {
    let val = this.data[i][j];
    this.data[i][j] = func(val);
  }
}

}

y luego llamar con myMatrix.map (doble ());

Enlaces útiles: https://www.codementor.io/eh3rrera/using-java-8-method-reference-du10866vx - no parece trabajo.

Kevin Trabajador:

Antes de Java tenía lambdas, la forma de hacerlo era utilizar casos anónimos de una interfaz como Runnable. Algo como esto:

void doTheThing(Runnable r){
  r.run();
}

doTheThing(new Runnable(){
  public void run(){
    yourFunctionHere();
  }
});

O si su función toma un parámetro, puede definir su propia interfaz de la siguiente manera:

interface ValueChanger{
  public float changeValue(float value);
}

Posteriormente, se podría crear una función que toma un ValueChangerejemplo, así:

void mapFunction(float[] data, ValueChanger valueChanger){
  data[0] = valueChanger.changeValue(data[0]);
}

Y se podría llamar a su función pasando en un caso en el anonimato:

mapFunction(myArray, new ValueChanger(){
  public float changeValue(float value){
    return value * 2;
  }
});

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=213834&siteId=1
Recomendado
Clasificación