SlideShare a Scribd company logo
JAVA 8
At First Glance
VISION Team - 2015
Agenda
❖ New Features in Java language
➢ Lambda Expression
➢ Functional Interface
➢ Interface’s default and Static Methods
➢ Method References
❖ New Features in Java libraries
➢ Stream API
➢ Date/Time API
Lambda Expression
What is Lambda Expression?
❖ Unnamed block of code (or an unnamed
function) with a list of formal parameters and
a body.
✓ Concise
✓ Anonymous
✓ Function
✓ Passed around
Lambda Expression
Lambda Expression
Why should we care about
Lambda Expression?
Example 1:
Comparator<Person> byAge = new Comparator<Person>(){
public int compare(Person p1, Person p2){
return p1.getAge().compareTo(p2.getAge());
}
};
Lambda Expression
Example 2:
JButton testButton = new JButton("Test Button");
testButton.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent ae){
System.out.println(“Hello Anonymous inner class");
}
});
Example 1: with lambda
Comparator<Person> byAge =
(Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge());
Lambda Expression
Example 2: with lambda
testButton.addActionListener(e -> System.out.println(“Hello
Lambda"));
Lambda Expression
Lambda Syntax
(Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge());
Lambda Expression
Lambda parameters Lambda body
Arrow
The basic syntax of a lambda is either
(parameters) -> expression
or
(parameters) -> { statements; }
❖ Lambda does not have:
✓ Name
✓ Return type
✓ Throws clause
✓ Type parameters
Lambda Expression
Examples:
1. (String s) -> s.length()
2. (Person p) -> p.getAge() > 20
3. () -> 92
4. (int x, int y) -> x + y
5. (int x, int y) -> {
System.out.println(“Result:”);
System.out.println(x + y);
}
Lambda Expression
Variable scope:
public void printNumber(int x) {
int y = 2;
Runnable r = () -> System.out.println(“Total is:” + (x+y));
new Thread(r).start();
}
Lambda Expression
Free variable: not define in lambda parameters.
Variable scope:
public void printNumber(int x) {
int y = 2;
Runnable r = () ->{System.out.println(“Total is:” + (x+y));
System.out.println(this.toString());};
new Thread(r).start();
}
Not allow:
public void printNumber(int x) {
int y = 2;
Runnable r = () -> {
x++;//compile error
System.out.println(“Total is:” + (x+y))
};
}
Lambda Expression
Where should we use Lambda?
Comparator:
Comparator<Person> byAge =
(Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge());
Collections.sort(personList, byAge);
Lambda Expression
Listener:
ActionListener listener = e -> System.out.println(“Hello
Lambda")
testButton.addActionListener(listener );
Example:
public void main(String[] args){
(int x, int y) -> System.out.println(x + y);
}
Runnable:
// Anonymous class
Runnable r1 = new Runnable(){
@Override
public void run(){
System.out.println("Hello world one!");
}
};
// Lambda Runnable
Runnable r2 = () -> System.out.println("Hello world two!");
Lambda Expression
Iterator:
List<String> features = Arrays.asList("Lambdas", "Default
Method", "Stream API", "Date and Time API");
//Prior to Java 8 :
for (String feature : features) {
System.out.println(feature);
}
//In Java 8:
Consumer<String> con = n -> System.out.println(n)
features.forEach(con);
Lambda Expression
Demonstration
What is functional interface?
Add text here...
Functional Interface
● New term of Java 8
● A functional interface is an interface with
only one abstract method.
Add text here...
Functional Interface
● Methods from the Object class don’t
count.
Add text here...
Functional Interface
Annotation in Functional
Interface
Add text here...
Functional Interface
● A functional interface can be annotated.
● It’s optional.
Add text here...
Functional Interface
● Show compile error when define more
than one abstract method.
Add text here...
Functional Interface
Functional Interfaces
Toolbox
Add text here...
Functional Interface
● Brand new java.util.function package.
● Rich set of function interfaces.
● 4 categories:
o Supplier
o Consumer
o Predicate
o Function
Add text here...
Functional Interface
● Accept an object and return nothing.
● Can be implemented by lambda
expression.
Add text here...
Consumer Interface
Demonstration
Interface Default and Static
Methods
Add text here...
Interface Default and Static Methods
static <T> Collection<T>
synchronizedCollection(Collection<T
Interface Default and Static Methods
● Advantages:
- No longer need to provide your own companion utility classes. Instead, you
can place static methods in the appropriate interfaces
- Adding methods to an interface without breaking the existing
implementation
java.util.Collections
java.util.Collection
● Extends interface declarations with two new concepts:
- Default methods
- Static methods
Interface Default and Static Methods
[modifier] default | static returnType nameOfMethod (Parameter List) {
// method body
}
● Syntax
Default methods
● Classes implement interface that contains a default method
❏ Not override the default method and will inherit the default method
❏ Override the default method similar to other methods we override in
subclass
❏ Redeclare default method as abstract, which force subclass to override it
Default methods
● Solve the conflict when the same method declare in interface or
class
- Method of Superclasses, if a superclass provides a concrete
method.
- If a superinterface provides a default method, and another
interface supplies a method with the same name and
parameter types (default or not), then you must overriding that
method.
Static methods
● Similar to default methods except that we can’t override
them in the implementation classes
Demonstration
Method References
● Method reference is an important feature related to
lambda expressions. In order to that a method
reference requires a target type context that consists of
a compatible functional interface
Method References
● There are four kinds of method references:
- 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
Method References
● Reference to a static method
The syntax: ContainingClass::staticMethodName
Method References
● Reference to an instance method of a particular object
The syntax: containingObject::instanceMethodName
Method References
● Reference to an instance method of an arbitrary object of a
particular type
The syntax: ContainingType::methodName
Method References
● Reference to a constructor
The syntax: ClassName::new
Method References
● Method references as Lambdas Expressions
Syntax Example As Lambda
ClassName::new String::new () -> new String()
Class::staticMethodName String::valueOf (s) -> String.valueOf(s)
object::instanceMethodName x::toString () -> "hello".toString()
Class::instanceMethodName String::toString (s) -> s.toString()
What is a Stream?
Add text here...
Stream
Old Java:
Add text here...
Stream
Add text here...
Stream
Java 8:
❏Not store data
❏Designed for processing data
❏Not reusable
❏Can easily be outputted as arrays or
lists
Add text here...
Stream
1. Build a stream
Add text here...
Stream - How to use
2. Transform stream
3. Collect result
Build streams from collections
List<Dish> dishes = new ArrayList<Dish>();
....(add some Dishes)....
Stream<Dish> stream = dishes.stream();
Add text here...
Stream - build streams
Build streams from arrays
Integer[] integers =
{1, 2, 3, 4, 5, 6, 7, 8, 9};
Stream<Integer> stream = Stream.of(integers);
Add text here...
Stream - build streams
Intermediate operations (return Stream)
❖ filter()
❖ map()
❖ sorted()
❖ ….
Add text here...
Stream - Operations
// get even numbers
Stream<Integer> evenNumbers = stream
.filter(i -> i%2 == 0);
// Now evenNumbers have {2, 4, 6, 8}
Add text here...
Stream - filter()
Terminal operations
❖ forEach()
❖ collect()
❖ match()
❖ ….
Add text here...
Stream - Operations
// get even numbers
evenNumbers.forEach(i ->
System.out.println(i));
/* Console output
* 2
* 4
* 6
* 8
*/
Add text here...
Stream - forEach()
Converting stream to list
List<Integer> numbers =
evenNumbers.collect(Collectors.toList());
Converting stream to array
Integer[] numbers =
evenNumbers.toArray(Integer[]::new);
Add text here...
Stream - Converting to collections
Demonstration
What’s new in Date/Time?
Add text here...
Date / Time
● Why do we need a new Date/Time API?
Add text here...
Date / Time
○ Objects are not immutable
○ Naming
○ Months are zero-based
● LocalDate
Add text here...
Date / Time
○ A LocalDate is a date, with a year,
month, and day of the month
LocalDate today = LocalDate.now();
LocalDate christmas2015 = LocalDate.of(2015, 12, 25);
LocalDate christmas2015 = LocalDate.of(2015,
Month.DECEMBER, 25);
Java 7:
Calendar c = Calendar.getInstance();
c.add(Calendar.DATE, 1);
Date dt = c.getTime();
Java 8:
LocalDate tomorrow = LocalDate.now().plusDay(1);
Add text here...
Date / Time
● Temporal adjuster
Add text here...
Date / Time
LocalDate nextPayDay = LocalDate.now()
.with(TemporalAdjusters.lastDayOfMonth());
● Create your own adjuster
TemporalAdjuster NEXT_WORKDAY = w -> {
LocalDate result = (LocalDate) w;
do {
result = result.plusDays(1);
} while (result.getDayOfWeek().getValue() >= 6);
return result;
};
LocalDate backToWork = today.with(NEXT_WORKDAY);
Add text here...
Date / Time
For further questions, send to us: hcmc-vision@axonactive.vn
Add text here...
References
❖ Java Platform Standard Edition 8 Documentation,
(http://docs.oracle.com/javase/8/docs/)
❖ Java 8 In Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft.
❖ Beginning Java 8 Language Features, Kishori Sharan.
❖ What’s new in Java 8 - Pluralsight
Add text here...
The End

More Related Content

PPTX
Java 8 Lambda and Streams
PDF
Java 8 features
PDF
Java 8 Stream API. A different way to process collections.
PPTX
Java 8 - Features Overview
PPTX
Java 8 lambda
PPTX
java 8 new features
PDF
Java 8 Lambda Expressions
ODP
Java 9 Features
Java 8 Lambda and Streams
Java 8 features
Java 8 Stream API. A different way to process collections.
Java 8 - Features Overview
Java 8 lambda
java 8 new features
Java 8 Lambda Expressions
Java 9 Features

What's hot (20)

ODP
Introduction to Java 8
PDF
Java8 features
PDF
Java 8 Lambda Expressions & Streams
PPTX
Java Lambda Expressions.pptx
PDF
Spring Framework - Core
PPTX
Optional in Java 8
PPTX
Java exception handling
PDF
Generics
PPT
Java Collections Framework
PPT
Java Persistence API (JPA) Step By Step
PPTX
collection framework in java
PDF
Java 8 Workshop
PDF
Spring Boot
PPTX
Spring boot Introduction
PPTX
Spring boot
PPTX
Spring jdbc
PPT
Major Java 8 features
PDF
Java Collection framework
PPTX
Spring data jpa
Introduction to Java 8
Java8 features
Java 8 Lambda Expressions & Streams
Java Lambda Expressions.pptx
Spring Framework - Core
Optional in Java 8
Java exception handling
Generics
Java Collections Framework
Java Persistence API (JPA) Step By Step
collection framework in java
Java 8 Workshop
Spring Boot
Spring boot Introduction
Spring boot
Spring jdbc
Major Java 8 features
Java Collection framework
Spring data jpa
Ad

Viewers also liked (7)

PPTX
New Features in JDK 8
PPTX
55 New Features in Java SE 8
PPTX
OCP Java (OCPJP) 8 Exam Quick Reference Card
PDF
Cracking OCA and OCP Java 8 Exams
PDF
Functional Thinking - Programming with Lambdas in Java 8
PDF
Sailing with Java 8 Streams
PPTX
Supercharged java 8 : with cyclops-react
New Features in JDK 8
55 New Features in Java SE 8
OCP Java (OCPJP) 8 Exam Quick Reference Card
Cracking OCA and OCP Java 8 Exams
Functional Thinking - Programming with Lambdas in Java 8
Sailing with Java 8 Streams
Supercharged java 8 : with cyclops-react
Ad

Similar to Java 8 presentation (20)

PPTX
java150929145120-lva1-app6892 (2).pptx
PPTX
PPTX
Java 8 Intro - Core Features
PDF
PDF
PPTX
A brief tour of modern Java
PPTX
Week-1..................................
PPTX
Java 8 new features
PPTX
Intro to java 8
PDF
Java 8
PPTX
New features in jdk8 iti
PPTX
What’s new in java 8
PDF
PPTX
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
PDF
Java 8 Interview Questions and Answers PDF By ScholarHat.pdf
PDF
What's new in java 8
PPTX
Java 8 Features
PPTX
Java 8 Feature Preview
PPTX
Java 8 - An Overview
PPTX
java150929145120-lva1-app6892 (2).pptx
Java 8 Intro - Core Features
A brief tour of modern Java
Week-1..................................
Java 8 new features
Intro to java 8
Java 8
New features in jdk8 iti
What’s new in java 8
JDK8 Lambdas and Streams: Changing The Way You Think When Developing Java
Java 8 Interview Questions and Answers PDF By ScholarHat.pdf
What's new in java 8
Java 8 Features
Java 8 Feature Preview
Java 8 - An Overview

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Encapsulation theory and applications.pdf
PPTX
sap open course for s4hana steps from ECC to s4
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Machine learning based COVID-19 study performance prediction
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Approach and Philosophy of On baking technology
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Building Integrated photovoltaic BIPV_UPV.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
Dropbox Q2 2025 Financial Results & Investor Presentation
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Encapsulation theory and applications.pdf
sap open course for s4hana steps from ECC to s4
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Review of recent advances in non-invasive hemoglobin estimation
Machine learning based COVID-19 study performance prediction
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Advanced methodologies resolving dimensionality complications for autism neur...
Network Security Unit 5.pdf for BCA BBA.
Approach and Philosophy of On baking technology
The Rise and Fall of 3GPP – Time for a Sabbatical?
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Digital-Transformation-Roadmap-for-Companies.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf

Java 8 presentation

  • 1. JAVA 8 At First Glance VISION Team - 2015
  • 2. Agenda ❖ New Features in Java language ➢ Lambda Expression ➢ Functional Interface ➢ Interface’s default and Static Methods ➢ Method References ❖ New Features in Java libraries ➢ Stream API ➢ Date/Time API
  • 3. Lambda Expression What is Lambda Expression?
  • 4. ❖ Unnamed block of code (or an unnamed function) with a list of formal parameters and a body. ✓ Concise ✓ Anonymous ✓ Function ✓ Passed around Lambda Expression
  • 5. Lambda Expression Why should we care about Lambda Expression?
  • 6. Example 1: Comparator<Person> byAge = new Comparator<Person>(){ public int compare(Person p1, Person p2){ return p1.getAge().compareTo(p2.getAge()); } }; Lambda Expression Example 2: JButton testButton = new JButton("Test Button"); testButton.addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent ae){ System.out.println(“Hello Anonymous inner class"); } });
  • 7. Example 1: with lambda Comparator<Person> byAge = (Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge()); Lambda Expression Example 2: with lambda testButton.addActionListener(e -> System.out.println(“Hello Lambda"));
  • 9. (Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge()); Lambda Expression Lambda parameters Lambda body Arrow The basic syntax of a lambda is either (parameters) -> expression or (parameters) -> { statements; }
  • 10. ❖ Lambda does not have: ✓ Name ✓ Return type ✓ Throws clause ✓ Type parameters Lambda Expression
  • 11. Examples: 1. (String s) -> s.length() 2. (Person p) -> p.getAge() > 20 3. () -> 92 4. (int x, int y) -> x + y 5. (int x, int y) -> { System.out.println(“Result:”); System.out.println(x + y); } Lambda Expression
  • 12. Variable scope: public void printNumber(int x) { int y = 2; Runnable r = () -> System.out.println(“Total is:” + (x+y)); new Thread(r).start(); } Lambda Expression Free variable: not define in lambda parameters. Variable scope: public void printNumber(int x) { int y = 2; Runnable r = () ->{System.out.println(“Total is:” + (x+y)); System.out.println(this.toString());}; new Thread(r).start(); } Not allow: public void printNumber(int x) { int y = 2; Runnable r = () -> { x++;//compile error System.out.println(“Total is:” + (x+y)) }; }
  • 14. Comparator: Comparator<Person> byAge = (Person p1, Person p2) -> p1.getAge().compareTo(p2.getAge()); Collections.sort(personList, byAge); Lambda Expression Listener: ActionListener listener = e -> System.out.println(“Hello Lambda") testButton.addActionListener(listener ); Example: public void main(String[] args){ (int x, int y) -> System.out.println(x + y); }
  • 15. Runnable: // Anonymous class Runnable r1 = new Runnable(){ @Override public void run(){ System.out.println("Hello world one!"); } }; // Lambda Runnable Runnable r2 = () -> System.out.println("Hello world two!"); Lambda Expression
  • 16. Iterator: List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); //Prior to Java 8 : for (String feature : features) { System.out.println(feature); } //In Java 8: Consumer<String> con = n -> System.out.println(n) features.forEach(con); Lambda Expression
  • 18. What is functional interface? Add text here... Functional Interface
  • 19. ● New term of Java 8 ● A functional interface is an interface with only one abstract method. Add text here... Functional Interface
  • 20. ● Methods from the Object class don’t count. Add text here... Functional Interface
  • 21. Annotation in Functional Interface Add text here... Functional Interface
  • 22. ● A functional interface can be annotated. ● It’s optional. Add text here... Functional Interface
  • 23. ● Show compile error when define more than one abstract method. Add text here... Functional Interface
  • 24. Functional Interfaces Toolbox Add text here... Functional Interface
  • 25. ● Brand new java.util.function package. ● Rich set of function interfaces. ● 4 categories: o Supplier o Consumer o Predicate o Function Add text here... Functional Interface
  • 26. ● Accept an object and return nothing. ● Can be implemented by lambda expression. Add text here... Consumer Interface
  • 28. Interface Default and Static Methods Add text here... Interface Default and Static Methods
  • 29. static <T> Collection<T> synchronizedCollection(Collection<T Interface Default and Static Methods ● Advantages: - No longer need to provide your own companion utility classes. Instead, you can place static methods in the appropriate interfaces - Adding methods to an interface without breaking the existing implementation java.util.Collections java.util.Collection ● Extends interface declarations with two new concepts: - Default methods - Static methods
  • 30. Interface Default and Static Methods [modifier] default | static returnType nameOfMethod (Parameter List) { // method body } ● Syntax
  • 31. Default methods ● Classes implement interface that contains a default method ❏ Not override the default method and will inherit the default method ❏ Override the default method similar to other methods we override in subclass ❏ Redeclare default method as abstract, which force subclass to override it
  • 32. Default methods ● Solve the conflict when the same method declare in interface or class - Method of Superclasses, if a superclass provides a concrete method. - If a superinterface provides a default method, and another interface supplies a method with the same name and parameter types (default or not), then you must overriding that method.
  • 33. Static methods ● Similar to default methods except that we can’t override them in the implementation classes
  • 35. Method References ● Method reference is an important feature related to lambda expressions. In order to that a method reference requires a target type context that consists of a compatible functional interface
  • 36. Method References ● There are four kinds of method references: - 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
  • 37. Method References ● Reference to a static method The syntax: ContainingClass::staticMethodName
  • 38. Method References ● Reference to an instance method of a particular object The syntax: containingObject::instanceMethodName
  • 39. Method References ● Reference to an instance method of an arbitrary object of a particular type The syntax: ContainingType::methodName
  • 40. Method References ● Reference to a constructor The syntax: ClassName::new
  • 41. Method References ● Method references as Lambdas Expressions Syntax Example As Lambda ClassName::new String::new () -> new String() Class::staticMethodName String::valueOf (s) -> String.valueOf(s) object::instanceMethodName x::toString () -> "hello".toString() Class::instanceMethodName String::toString (s) -> s.toString()
  • 42. What is a Stream? Add text here... Stream
  • 43. Old Java: Add text here... Stream
  • 45. ❏Not store data ❏Designed for processing data ❏Not reusable ❏Can easily be outputted as arrays or lists Add text here... Stream
  • 46. 1. Build a stream Add text here... Stream - How to use 2. Transform stream 3. Collect result
  • 47. Build streams from collections List<Dish> dishes = new ArrayList<Dish>(); ....(add some Dishes).... Stream<Dish> stream = dishes.stream(); Add text here... Stream - build streams
  • 48. Build streams from arrays Integer[] integers = {1, 2, 3, 4, 5, 6, 7, 8, 9}; Stream<Integer> stream = Stream.of(integers); Add text here... Stream - build streams
  • 49. Intermediate operations (return Stream) ❖ filter() ❖ map() ❖ sorted() ❖ …. Add text here... Stream - Operations
  • 50. // get even numbers Stream<Integer> evenNumbers = stream .filter(i -> i%2 == 0); // Now evenNumbers have {2, 4, 6, 8} Add text here... Stream - filter()
  • 51. Terminal operations ❖ forEach() ❖ collect() ❖ match() ❖ …. Add text here... Stream - Operations
  • 52. // get even numbers evenNumbers.forEach(i -> System.out.println(i)); /* Console output * 2 * 4 * 6 * 8 */ Add text here... Stream - forEach()
  • 53. Converting stream to list List<Integer> numbers = evenNumbers.collect(Collectors.toList()); Converting stream to array Integer[] numbers = evenNumbers.toArray(Integer[]::new); Add text here... Stream - Converting to collections
  • 55. What’s new in Date/Time? Add text here... Date / Time
  • 56. ● Why do we need a new Date/Time API? Add text here... Date / Time ○ Objects are not immutable ○ Naming ○ Months are zero-based
  • 57. ● LocalDate Add text here... Date / Time ○ A LocalDate is a date, with a year, month, and day of the month LocalDate today = LocalDate.now(); LocalDate christmas2015 = LocalDate.of(2015, 12, 25); LocalDate christmas2015 = LocalDate.of(2015, Month.DECEMBER, 25);
  • 58. Java 7: Calendar c = Calendar.getInstance(); c.add(Calendar.DATE, 1); Date dt = c.getTime(); Java 8: LocalDate tomorrow = LocalDate.now().plusDay(1); Add text here... Date / Time
  • 59. ● Temporal adjuster Add text here... Date / Time LocalDate nextPayDay = LocalDate.now() .with(TemporalAdjusters.lastDayOfMonth());
  • 60. ● Create your own adjuster TemporalAdjuster NEXT_WORKDAY = w -> { LocalDate result = (LocalDate) w; do { result = result.plusDays(1); } while (result.getDayOfWeek().getValue() >= 6); return result; }; LocalDate backToWork = today.with(NEXT_WORKDAY); Add text here... Date / Time
  • 61. For further questions, send to us: hcmc-vision@axonactive.vn
  • 62. Add text here... References ❖ Java Platform Standard Edition 8 Documentation, (http://docs.oracle.com/javase/8/docs/) ❖ Java 8 In Action, Raoul-Gabriel Urma, Mario Fusco, and Alan Mycroft. ❖ Beginning Java 8 Language Features, Kishori Sharan. ❖ What’s new in Java 8 - Pluralsight

Editor's Notes

  • #7: The code is quite not elegant and not easy to read. Anonymous classes use a bulky syntax. Lambda expressions use a very concise syntax to achieve the same result.
  • #10: The body of a lambda expression is a block of code enclosed in braces. Like a method's body, the body of a lambda expression may declare local variables; use statements including break, continue, and return; throw exceptions, etc.
  • #11: A lambda expression does not have a name. A lambda expression does not have a throws clause. It is inferred from the context of its use and its body. A lambda expression cannot declare type parameters. That is, a lambda expression cannot be generic A lambda expression does not have a explicit return type. It is auto recognized by the compiler from the context of its use and from its body.
  • #13: Accessing outer scope variables from lambda expressions is very similar to anonymous objects. You can access final variables from the local outer scope as well as instance fields and static variables
  • #17: So where exactly can you use lambdas? You can use a lambda expression in the context of a functional interface. Don’t worry if this sounds abstract; we now explain in detail what this means and what a functional interface is.
  • #20: Functional Interface is a new term of Java 8 The functional interface is an normal interface with only one abstract method. Take a look at the example here, the well-known Runnable and Comparator interface are now become functional interface, so what we can see here that the term of functional interface is new but all the interfaces back from previous Java versions are becoming functional interface without any needed of modification.
  • #21: When we count the abstract method from an interface to check if it’s functional interface or not. The methods from Object class don’t count. Why some methods of the Object class sometimes are added to an interface? But most of the time and this is the reason because someone would like to redeclared methods from Object class in the interface in order to extend comments from Object’s class in order to give some special semantic and to add javadoc that might be different from Object class. http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/Comparator.java/?v=source
  • #22: By the default, the compiler of Java will automatically check if interface is a functional interface or not. But for convenience, the functional interface can be annotated inside the code.
  • #23: It can be annotated by adding @FunctionalInterface on the top of the interface like the example below. By doing so, the IDE will help you to detect if it is a functional interface before compiler do its job.
  • #24: In this example, I declared another abstract method in the functional interface and as you can see, with the annotation, the IDE will check and show an error message that this interface is not a functional interface. So you can immediately notice and correct the problem.
  • #25: With the new term of functional interface defined in java 8. It also includes a brand new sets of functional interfaces.
  • #26: All these functional interfaces are defined in new package named java.util.function. It contains around 43 interfaces and grouped into 4 categories as I listed below: Supplier, consumer, predicate, function. You will see and use it a lot when you working with Java 8 and lambda expression. In the scope of this presentation I will not go and explain for every interfaces. Instead, I will pick one of them to give you an example.
  • #31: Classes implement interface that contains a default method, they can perform following: - Not override the default method and will inherit the default method - Override the default method similar to other methods we override in subclass - Redeclare default method as abstract, which force subclass to override it
  • #32: Classes implement interface that contains a default method, they can perform following: - Not override the default method and will inherit the default method - Override the default method similar to other methods we override in subclass - Redeclare default method as abstract, which force subclass to override it
  • #44: Let’s talk about why the stream is efficient. Nowaday, most of computer are using multiple CPUs, so we will take advantages of that to the stream in order to process data parallelly.
  • #45: Let’s talk about why the stream is efficient. Nowaday, most of computer are using multiple CPUs, so we will take advantages of that to the stream in order to process data parallelly.
  • #50: Intermediate operations return the stream itself so you can chain multiple method calls in a row. Let’s learn important ones.
  • #51: Intermediate operations return the stream itself so you can chain multiple method calls in a row. Let’s learn important ones.
  • #52: Terminal operations return a result of a certain type instead of again a Stream.
  • #53: Intermediate operations return the stream itself so you can chain multiple method calls in a row. Let’s learn important ones.
  • #54: Intermediate operations return the stream itself so you can chain multiple method calls in a row. Let’s learn important ones.
  • #57: statefull Date is not a date, but a timestamp, Calendar is mix of dates and times… have to work with Joda API. But there still have problem with the performance… this new API is base on Joda and was implemented by joda team