2016-01-31 1 views
3

J'ai essayé de trouver un moyen d'écrire une méthode qui prend une référence de méthode Java 8 en entrée, exécute cette méthode et retourne l'heure il a fallu courir.Ecriture d'une méthode généralisée pour chronométrer toute autre méthode utilisant Java 8 lambdas

public static long time(Runnable c) { 
    long start, end; 
    start = System.currentTimeMillis(); 
    c.run(); 
    end = System.currentTimeMillis(); 
    return (end - start); 
} 

C'est ce que j'ai jusqu'à présent, mais cela ne fonctionne que pour une méthode sans paramètre ... Je cherche quelque chose qui peut travailler avec une méthode qui peut prendre des paramètres aussi bien. Est-ce possible?

+2

Comme un côté note, si vous avez l'intention d'avoir cette à faire des micro repères alors vous feriez mieux d'apprendre un cadre de référence comme JMH. – Tunaki

+2

J'espère vraiment que vous ne prévoyez pas l'utiliser pour l'analyse comparative. –

+0

@BrianGoetz Oui, j'ai l'intention d'utiliser cela pour l'analyse comparative. Pourriez-vous expliquer ce que serait le problème avec cela? ... – kxirog

Répondre

6

Eh bien, un travail est là pour envelopper votre méthode dans un lambda

int foo =... 
Object bar = ... 

long elapsed = time(() -> myMethod(foo, bar)); 
+1

Merci! C'est exactement ce que je cherchais – kxirog