Convertir cuerpo del bucle de iteración funcional en código Java 8

arabian_albert:

Quiero convertir el siguiente código en el código imperativo funcional utilizando Java 8.

La forma en que funciona es capturo el momento actual antes y después de la llamada a la API, a continuación, le resto el antes del después. El resultado es un mal momento que le tomó a la API para ejecutar, yo también uso de la memoria cature. I reunir esta tiempos de respuesta y los datos de uso de memoria en 2 listas que luego proceso.

Entonces, ¿cómo mantener, EL FUNCIONAMIENTO actual, mientras que la conversión en código funcional?

Simulator simulator = new Simulator();

List<Double> execTimes = new ArrayList<>();
List<Long> execMemory = new ArrayList<>();

StringBuilder sb = new StringBuilder();

for (int i = 0; i < 1000; i++)
{
    Runtime runtime = Runtime.getRuntime();
    runtime.gc();

    Long startTime = System.currentTimeMillis();

    byte[] dataBytes = simulator.generateData(simulator.readFileAsString(input)); // API to measure

    long memoryUsed = runtime.totalMemory() - runtime.freeMemory(); // capture memory usage
    Long stopTime = System.currentTimeMillis();
    Long time = stopTime - startTime; // measure api response time

    sb.append(i).append(',').append(time)
      .append(',').append(memoryUsed).append(',').append("\n");


    simulator.writeToFile(new File(inputDoc), dataBytes, i);

    execMemory.add(memoryUsed);
    execTimes.add(time.doubleValue());

    System.out.println("Execution time (MS): "+(time));
    System.out.println("Memory usage (B) ["+i+"]: "+memoryUsed);
}

Esto no funciona muy bien:

IntStream.range(0, 1000)
                    .forEach(i ->
                            simulator.generateData(simulator.readFileAsString(inputDoc)) );

He intentado usar la estufa, pero no estoy seguro de si este es el caso para el uso adecuado de enteros corriente, ya que no permite otros adornos como caturing tiempos de respuesta. Tal vez una mónada sería trabajar aquí?

Ousmane D .:

Este no es un buen ejemplo de utilización de las denominadas "funciones de programación funcional" como de JDK8. Hay demasiados efectos secundarios y las diferentes cosas que suceden.

una cosa que podría hacer es el uso IntStream.rangepara el bucle:

IntStream.range(0, 1000).forEach(index -> {
   // logic here          
});

pero yo no recomendaría esto, su enfoque parece muy bien.

Supongo que te gusta

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