Wednesday, November 30, 2016

Java 8 Parallel Stream Basic Usage & Perf. Test

public class Main {
public static void main (String[] args) {
Stomach stomach = new Stomach ();
long startTime = System.currentTimeMillis ();
for (int i = 0; i < 10000; i++) {
stomach.accept (new Salad ());
stomach.accept (new Burger ());
}
long normalDigestionDuration = System.currentTimeMillis () - startTime;
//------------------------------------------------------------------------------------------
Consumer<Food> c = (Food food)-> {
System.out.println ("Eating the " +food);
};
List<Food> foods = new ArrayList<> ();
for (int i = 0; i < 10000; i++) {
stomach.accept (new Salad ());
stomach.accept (new Burger ());
}
startTime = System.currentTimeMillis ();
foods.parallelStream ().map (food->{consumeFood (food,c);return food;}).count ();
long paralelStreamDigestDuration = System.currentTimeMillis () - startTime;
//------------------------------------------------------------------------------------------
System.out.println ("Digestion duration is :" + normalDigestionDuration);// ~120 ms
System.out.println ("Digestion with parallel stream = " + paralelStreamDigestDuration);// ~7 ms...so fast huh ?
}
public static void consumeFood (Food food, Consumer<Food> consumer){
consumer.accept (food);
}
}
Outputs::
Digestion duration is :120
Digestion with parallel stream = 7

Tuesday, November 29, 2016

Java 8 Consumer SAM sample

public abstract class Food {
public abstract void giveEnergy () ;
}
public class Burger extends Food {
@Override
public void giveEnergy () {
System.out.println ("Burger gives high energy");
}
}
public class Salad extends Food {
@Override
public void giveEnergy () {
System.out.println ("Salad does not give energy");
}
}
package com.company.samples.way6;
import java.util.function.Consumer;
public class Stomach<T extends Food> implements Consumer<T> {
@Override
public void accept (T t) {
t.giveEnergy ();
}
}
package com.company.samples.way6;
public class Main {
public static void main (String[] args) {
Stomach stomach = new Stomach ();
stomach.accept (new Salad ());
stomach.accept (new Burger ());
}
}
Outputs:::
Salad does not give energy
Burger gives high energy

Java 8 stream samples not much but easily reachable


package com.company.samples.way4;
import java.util.*;
import java.util.stream.Collectors;
/**
* Created by serkan on 28.11.2016.
*/
public class Main {
public static void main (String[] args) {
List<Person> roster = new ArrayList<Person> ();
roster.add (new Person ("John", 23, Gender.Male));
roster.add (new Person ("wayne", 37, Gender.Male));
roster.add (new Person ("Angelina", 23, Gender.Femal));
roster.add (new Person ("Jolie", 12, Gender.Femal));
roster.add (new Person ("Wolverine", 500, Gender.Male));
roster.add (new Person ("Xavier", 70, Gender.Male));
roster.add (new Person ("Aişe", 6, Gender.Femal));
roster.add (new Person ("Aişe", 6, Gender.Femal));
Map<Gender, List<Person>> byGender = roster.parallelStream ().collect (Collectors.groupingByConcurrent (Person::getGender));
System.out.println ("byGender = " + byGender);//this is so cool huh ?
Double averageAge = roster.parallelStream ().collect (Collectors.averagingInt (Person::getAge));
System.out.println ("averageAge = " + averageAge);
OptionalDouble anotherAverageAge = roster.parallelStream ().mapToInt (p -> p.getAge ()).average ();
System.out.println ("anotherAverageAge = " + anotherAverageAge);
List<Person> femalesOnly = roster.parallelStream ().filter (p -> p.getGender () == Gender.Femal).collect (Collectors.toList ());
System.out.println ("femalesOnly = " + femalesOnly);
List<Person> distinct = roster.parallelStream ().distinct ().collect (Collectors.toList ());
System.out.println ("distinct = " + distinct);
Set<Person> anotherDistinct = roster.parallelStream ().collect (Collectors.toSet ());
System.out.println ("anotherDistinct = " + anotherDistinct);
int sumOfAges = roster.parallelStream ().mapToInt (Person::getAge).sum ();
System.out.println ("sumOfAges = " + sumOfAges);
int anotherSumOfAges = roster.parallelStream ().mapToInt (p-> p.getAge ()).sum ();
System.out.println ("anotherSumOfAges = " + anotherSumOfAges);
long justAnotherSumOfAges = roster.parallelStream ().collect (Collectors.summarizingInt (Person::getAge)).getSum ();
System.out.println ("justAnotherSumOfAges = " + justAnotherSumOfAges);
final Comparator<Person> comp = (p1, p2) -> Integer.compare( p1.getAge(), p2.getAge());
Person oldest = roster.stream().max(comp).get();
System.out.println ("oldest = " + oldest);
Person youngest = roster.stream().min((p1, p2) -> Integer.compare(p1.getAge(), p2.getAge())).get();
System.out.println ("youngest = " + youngest);
String lexicalLatests = roster.parallelStream ().max ((p1, p2) -> p1.getName ().compareTo (p2.getName ())).get ().getName ();
System.out.println ("lexicalLatests = " + lexicalLatests);
}
}
byGender = {Male=[Person{name='Xavier', age=70, gender=Male}, Person{name='Wolverine', age=500, gender=Male}, Person{name='wayne', age=37, gender=Male}, Person{name='John', age=23, gender=Male}], Femal=[Person{name='Aişe', age=6, gender=Femal}, Person{name='Aişe', age=6, gender=Femal}, Person{name='Angelina', age=23, gender=Femal}, Person{name='Jolie', age=12, gender=Femal}]}
averageAge = 84.625
anotherAverageAge = OptionalDouble[84.625]
femalesOnly = [Person{name='Angelina', age=23, gender=Femal}, Person{name='Jolie', age=12, gender=Femal}, Person{name='Aişe', age=6, gender=Femal}, Person{name='Aişe', age=6, gender=Femal}]
distinct = [Person{name='John', age=23, gender=Male}, Person{name='wayne', age=37, gender=Male}, Person{name='Angelina', age=23, gender=Femal}, Person{name='Jolie', age=12, gender=Femal}, Person{name='Wolverine', age=500, gender=Male}, Person{name='Xavier', age=70, gender=Male}, Person{name='Aişe', age=6, gender=Femal}]
anotherDistinct = [Person{name='John', age=23, gender=Male}, Person{name='wayne', age=37, gender=Male}, Person{name='Wolverine', age=500, gender=Male}, Person{name='Xavier', age=70, gender=Male}, Person{name='Angelina', age=23, gender=Femal}, Person{name='Jolie', age=12, gender=Femal}, Person{name='Aişe', age=6, gender=Femal}]
sumOfAges = 677
anotherSumOfAges = 677
justAnotherSumOfAges = 677
oldest = Person{name='Wolverine', age=500, gender=Male}
youngest = Person{name='Aişe', age=6, gender=Femal}
lexicalLatests = wayne