java 8
TRANSCRIPT
Lambda, Method References & Aggregate Operations
Md. Fasihul KabirSoftware Engineer, Platform Dhaka, Escenic Asia Ltd.
Some Cool Features of Java 8� Lambda expressions� Method references� Default Methods (Defender methods)� A new Stream API� Optional� A new Date/Time API� Nashorn, the new JavaScript engine� Removal of the Permanent Generation� and more…
Some Cool Features of Java 8� Lambda Expressions� Method References� Default Methods (Defender methods)� A new Stream API� Optional� A new Date/Time API� Nashorn, the new JavaScript engine� Removal of the Permanent Generation� and more…
Lambda Expressions
Syntax
(arguments) -> {body}
Example
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
System.out.println("button clicked");}
});
button.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){
System.out.println("button clicked");}
});
button.addActionListener(event -> System.out.println("button clicked")
);
Structure of Lambda Expressions� A lambda expression can have zero, one or more parameters� The type of the parameters can be explicitly declared or it can be inferred from the
context. e.g. (int a) is same as just (a)
� Parameters are enclosed in parentheses and separated by commas. e.g. (a, b) or (int a, int b) or (String a, int b, float c)
� Empty parentheses are used to represent an empty set of parameters. e.g. () -> 42
� When there is a single parameter, if its type is inferred, it is not mandatory to use parentheses
e.g. a -> return a*a� The body of the lambda expressions can contain zero, one or more statements� If body of lambda expression has single statement curly brackets are not mandatory and
the return type of the anonymous function is the same as that of the body expression� When there is more than one statement in body than these must be enclosed in curly
brackets (a code block) and the return type of the anonymous function is the same as the type of the value returned within the code block, or void if nothing is returned
Method References
Kinds of Method ReferencesKind ExampleReference to a static method ContainingClass::staticMethodNameReference to an instance method of a particular object
containingObject::instanceMethodName
Reference to an instance method of an arbitrary object of a particular type
ContainingType::methodName
Reference to a constructor ClassName::new
Reference to a Static Method� The method reference Person::compareByAge is a
reference to a static method.
Reference to an Instance Method of a Particular Object
Reference to an Instance Method of an Arbitrary Object of a Particular Type
Reference to a Constructor
Aggregate Operations
Pipelines and Streams
Components of Pipeline� A source: This could be a collection, an array, a
generator function, or an I/O channel. In this example, the source is the collection roster.
� Zero or more intermediate operations. An intermediate operation, such as filter, produces a new stream.
� A terminal operation. A terminal operation, such as forEach, produces a non-stream result, such as a primitive value (like a double value), a collection, or in the case of forEach, no value at all.