I love performance tests. generally I test everything myself if there is no source in the internet I must do it :)
today I was reading imperative coding vs functional coding here . it stuck my mind this sentence.
they’re probably equally fast and reasonable
then I have to try which one is faster. here is the code
package testarea ;
import java.util.stream.Collectors ;
import java.util.stream.IntStream ;
public class Test {
static int [] array = new int [] { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 8 , 8 , 9 , 10 };
static long startTime , stopTime ;
public static void main ( String [] args ) {
runImperative ();
runFunctional ();
runImperative ();
runFunctional (); runFunctional (); runFunctional (); runFunctional ();
runImperative (); runImperative (); runImperative (); runImperative ();
runFunctional ();
}
private static void runFunctional () {
startTime = System . nanoTime ();
functionalApproach ();
stopTime = System . nanoTime ();
System . out . println ( "F:" +( stopTime - startTime ));
}
private static void runImperative () {
startTime = System . nanoTime ();
imperativeApproach ();
stopTime = System . nanoTime ();
System . out . println ( "I:" +( stopTime - startTime ));
}
private static void imperativeApproach () {
int sum = 0 ;
for ( int j = 0 ; j < array . length ; j ++) {
for ( int k = j + 1 ; k < array . length ; k ++) {
if ( k != j && array [ k ] == array [ j ]) {
sum = sum + array [ k ];
}
}
}
}
private static void functionalApproach () {
IntStream . of ( array ). boxed (). collect ( Collectors . groupingBy ( i -> i )). entrySet (). stream ()
. filter ( e -> e . getValue (). size () > 1 ). forEach ( e -> {
e . getValue (). stream (). collect ( Collectors . summingInt ( i -> i ));
});
}
}
here is my output
I:8297
F:93871512
I:6048
F:192964
F:165003
F:164852
F:158849
I:5988
I:5681
I:5805
I:5740
F:159416
as you see imperative coding kick ass. and in my mind its easy to understand. I know it does not look beautiful like functional. still it works and far faster then functional. just saying :)
Please enable JavaScript to view the comments powered by Disqus.