Java 8 Tutorial#
Overview#
New Features#
Lambda expression − Adds functional processing capability to Java.
Method references − Referencing functions by their names instead of invoking them directly. Using functions as parameter.
Default method − Interface to have default method implementation.
New tools − New compiler tools and utilities are added like ‘jdeps’ to figure out dependencies.
Stream API − New stream API to facilitate pipeline processing.
Date Time API − Improved date time API.
Optional − Emphasis on best practices to handle null values properly.
Nashorn, JavaScript Engine − A Java-based engine to execute JavaScript code.
Lambda Expressions#
Syntax#
parameter -> expression body
Lambda Expressions Example#
MathOperation addition = (int a, int b) -> a + b;
GreetingService greetService1 = message -> System.out.println("Hello " + message);
LambdaSortLambdaMathService
Method References#
List names = new ArrayList();
names.forEach(System.out::println);
MethodReferences
Functional Interfaces#
FunctionalInterfaces
Default Methods#
Syntax#
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
}
Multiple Defaults#
public interface fourWheeler {
default void print() {
System.out.println("I am a four wheeler!");
}
}
public class car implements vehicle, fourWheeler {
public void print() {
System.out.println("I am a four wheeler car vehicle!");
}
}
Static Default Methods#
public interface vehicle {
default void print() {
System.out.println("I am a vehicle!");
}
static void blowHorn() {
System.out.println("Blowing horn!!!");
}
}
DefaultMethods
Streams#
Generating Streams#
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
forEach#
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
map#
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
//get list of unique squares
List<Integer> squaresList = numbers.stream().map( i -> i*i).distinct().collect(Collectors.toList());
filter#
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
int count = strings.stream().filter(string -> string.isEmpty()).count();
limit#
Random random = new Random();
random.ints().limit(10).forEach(System.out::println);
sorted#
Random random = new Random();
random.ints().limit(10).sorted().forEach(System.out::println);
Parallel Processing#
List<String> strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
//get count of empty string
long count = strings.parallelStream().filter(string -> string.isEmpty()).count();
Collectors#
List<String>strings = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
List<String> filtered = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println("Filtered List: " + filtered);
String mergedString = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining(", "));
System.out.println("Merged String: " + mergedString);
Statistics#
List numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5);
IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();
System.out.println("Highest number in List : " + stats.getMax());
System.out.println("Lowest number in List : " + stats.getMin());
System.out.println("Sum of all numbers : " + stats.getSum());
System.out.println("Average of all numbers : " + stats.getAverage());
Streams
Optional Class#
Class Declaration#
public final class Optional<T> extends Object
OptionalClass
Nashorn JavaScript#
NashornJavaScript
New Date/Time API#
LocalDateTimeAPIZonedDateTimeAPIChronoUnitsEnumPeriodAndDurationTemporalAdjustersBackwardCompatibility
Base64#
Base64Example