= Java8 = Has many improvements like added support for functional programming (anonymous functions, lambdas), added new date time API and the new stream API similar to LINQ queries in C# (map/reduce). Also has new Base64 Encoder/Decoder. == Lambda expressions examples == {{{#!highlight java /* javac LambdaExpressionTest.java java -cp . LambdaExpressionTest */ public class LambdaExpressionTest{ public static void main(String[] args){ System.out.println("LambdaExpressionTest"); // define implementation // (lambda parameters) -> { // lambda body }; TestIt testIt = (stuffx) -> System.out.println("Stuff " + stuffx); testIt.sayStuff("Msg"); // change lambda function implementation testIt = (stuffxx) -> { stuffxx = stuffxx.toUpperCase(); System.out.println("OtherStuff " + stuffxx); }; testIt.sayStuff("Msg"); } // lambda expressions require interfaces to define the expected parameters public interface TestIt{ void sayStuff(String stuff); } } }}} == Method reference examples == {{{#!highlight java /* Usage of :: to refer to a method. Similar in concept to function pointers/callbacks javac MethodReferenceExample.java ASD.java java -cp . MethodReferenceExample Interface Consumer Functional interface and can therefore be used as the assignment target for a lambda expression or method reference. */ import java.util.ArrayList; public class MethodReferenceExample{ public static void main(String[] args){ System.out.println("MethodReferenceExample"); ArrayList al = new ArrayList(); al.add("Str1"); al.add("Str2"); al.add("Str3"); //For each string in the array list call println having as argument the item al.forEach(System.out::println); ASD dummy = new ASD(); al.forEach(dummy::showStuff); } } }}} {{{#!highlight java public class ASD{ public ASD(){ } public void showStuff(String message){ System.out.println("Show stuff " + message); } } }}} == Stream example == {{{#!highlight java /* Allows map/reduce stuff .... javac StreamExample.java java -cp . StreamExample */ import java.util.List; import java.util.Arrays; import java.util.stream.Stream; import java.util.stream.Collectors; import java.util.Optional; public class StreamExample{ public static void main(String[] args){ List list = Arrays.asList(1,5,6,9,2,5,7,8); // get stream from list collection Stream stream = list.stream(); // filters values from the list where the value is higher or equal than 5 Stream higherEqualThan5 = stream.filter( val -> val >=5 ); // get list of Ints from stream List list5 = higherEqualThan5.collect(Collectors.toList()); list5.forEach( System.out::println ); stream = list.stream(); // maps values from the list multiplying it's elements by 2 Stream mulBy2 = stream.map( val ->{Integer res= val*2; return res;} ); // get list of Ints from stream List listMulBy2 = mulBy2.collect(Collectors.toList()); listMulBy2.forEach( System.out::println ); stream = list.stream(); // sum (reduce) all values in the list Optional reduce = stream.reduce( (a,b) -> a+b ); if(reduce.isPresent() ){ System.out.println(reduce.get()); } } } }}} == java time == {{{#!highlight java import java.time.Instant; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; // .... Instant instant = Instant.ofEpochMilli(datex.getTime()); DateTimeFormatter formatterDateTime = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); ZonedDateTime dateTime = ZonedDateTime.ofInstant(instant, ZoneId.of("UTC")); formattedDateTime = formatterDateTime.format(dateTime); }}} == Filter example == * https://repl.it/languages/java {{{#!highlight java import java.util.List; import java.util.ArrayList; import java.util.stream.Stream; import java.util.stream.Collectors; class Main { public static void main(String[] args) { System.out.println("Hello world!"); List list = new ArrayList(); for(int i=1;i<10;i++){ list.add(i); } Stream s = list.stream(); List result = s.filter( val -> val%2==0 ).collect(Collectors.toList()); result.forEach(item -> System.out.println(item) ); } } }}} * GetNumbersImpl.java GetNumbers.java Main.java === GetNumbers.java === {{{#!highlight java import java.util.List; public interface GetNumbers { public List getEven(List numbers); } }}} === GetNumbersImpl.java === {{{#!highlight java import java.util.List; import java.util.stream.Stream; import java.util.stream.Collectors; public class GetNumbersImpl implements GetNumbers { public GetNumbersImpl(){ } public List getEven(List numbers) { Stream s = numbers.stream(); List result = s.filter(val -> val % 2 == 0).collect(Collectors.toList()); return result; } } }}} === Main.java === {{{#!highlight java import java.util.List; import java.util.ArrayList; import java.util.stream.Stream; import java.util.stream.Collectors; class Main { public static void main(String[] args) { List list = new ArrayList(); for (int i = 1; i < 10; i++) { list.add(i); } GetNumbers gn = new GetNumbersImpl(); List result = gn.getEven(list); result.forEach(item -> System.out.println(item)); } } }}} === Build and run === {{{#!highlight sh yum install java-1.8.0-openjdk yum install java-1.8.0-openjdk-devel javac Main.java java Main }}}