Some of the best ideas from functional programming have migrated their way into Java 8. What this means is easier to read and more flexible code that scales to multicore. A related and exciting trend that we're also teaching and increasingly seeing with Java 9 and beyond is Reactive and Asynchronous programming. With these trends in mind, this three-day Java training course provides an in-depth insight into Modern Java and its utility in modern product development.
Join Richard Warburton, author of Java 8 Lambdas: Pragmatic Functional Programming and empirical technologist, as he dives into the latest cutting edge tools and concepts driving Modern Java’s renown in the tech community for creating flexible, robust and concise clean code. Collaborate with other members of the Java community and through these discussions, find new ways to apply your learnings to current and future projects.
- Boost your product development with an advanced knowledge of Java 8 -
Who you will be learning with
Software engineers, heads of engineering, development managers, delivery managers and those working with Java (or who are returning to it) who are interested in learning the latest concepts and tools that underpin the functional realm that Java 8 provides.
How to apply these skills
Streamline and strengthen your product development with an in-depth foundational knowledge of Java 8, while accessing a path towards learning and mastering Java 9.
Book early to receive a discount on the course price and in doing so you will not only commit to growing your own skillset, but help us grow our community of over 140,000 passionate techies.
Learn how to:
- Get up to date with the language changes introduced by lambda expressions in Java 8.
- Think in terms of functional programming and understand where this is an appropriate approach and where its not.
- Introduce changes to the collections library such as Streams and the higher order functions such as map and filter.
- Understand how to use them in order to solve simple data processing problems.
What the community says
"Very knowledgeable and an engaging delivery style. Excellent exercises to complement the learning, well spread out to give a good balance between lecture/practical."Michael Funnell, Betfair
"Honestly the best course I've ever attended. Perfect balance of lectures and exercises."Aaron Graham, Unruly Group
"Entertaining and engaging presentation style, well prepared code demonstrations."Boris Morris, Anaplan
"Best Development course I've been on in 10 years! I will get the rest of my team to attend this course."James Callaghan
"Thanks again for a providing such a great workshop."Attendee
- Why Java 8?
- Behaviour parameterisation
- More flexible code
- Anonymous classes
- What is a lambda?
- Functional interfaces: where to use lambda expressions?
- Refactoring/putting together exercise
- Method references: firstclass
- Functions in Java 8
- Method references recipes
- Type checking
- Type inference
- Using local variables
- Collection Processing
- What is a Stream?
- Stream operations and patterns
- Finding and Matching
- Stream Optimization
- The reduce pattern
- Eager vs Lazy
- Shortcircuiting and Loop Fusion
Exercise: financial data processing (part 1)
- Grouping and partitioning
- Collection Operations
- Collecting to lists and sets
- Flexible Collection
- Arithmetic collectors
- Summary statistics
- Advanced Queries
- Beyond grouping and partitioning
- Downstream collectors
Exercise: financial data processing (part 2)
- Extending the reduce pattern
- Reducing collector
Easy Data Parallelism
- What is Data Parallelism?
- Why is this important?
- Parallelising your streams
- Parallel Gotchas
- Misuse of reduce
- Don’t use Locks
- Danger of mutability
- Decomposing performance
Testing & Debugging Lambda Expressions
- Unit testing lambda expressions
- Debugging with laziness
- Stack traces
Practical: Hands on Debugging
Default and static methods on interfaces
- Motivation for default methods
- Static methods in interface
- Useful default methods
- Patterns for default methods
- Resolution rules
Enhanced Design with Lambdas
- Execute around: resource handling
- Deferred execution: Logging
- Design patterns
- Processing pipeline
Date & Time in Java 8
- The problem with existing date and time libraries
- The core classes: LocalDate/LocalTime
- Common API Patterns
Optional data types
- The problem with null
- How Optional improves upon null
- How to use Optional in your code
- Creating Optional objects
- Default values and actions
- Transforming Optionals with map
- Chaining Optionals with flatMap
- Rejecting values with filter
Enhanced Concurrency with Lambdas
- Introduction to Concurrency
- Future and ExecutorService
Asynchronous vs Synchronous Programming
Asynchronous Servlets (3.0)
Why use asynchronous communications?
- Fault Tolerance
Approaches to Concurrency
The Reactive Manifesto and Functional Reactive Programming
Models of Concurrency
- Event Based
- The Actor Model
- Reactive Streams
Promises using Completable Futures
Alternative Promise Implementations
The Actor Model with Akka
What are Actors?
Alternative Actor Implementations
Reactive Streams with RxJava
Introducing Reactive Streams
Pull vs. push models
Java 9 Flow API
Alternative Reactive Stream Implementations
If you are a Java developer with some professional programming experience, this course is for you. If you have object oriented experience but haven’t yet explored the functional realm that Java 8 provides, then this course is also for you!
The course is also ideal for developers who have written Java before but are returning to it as a language now after a few years in ruby/python and want to get up to speed with modern Java.
To get the most from this course, delegates should have programming experience with Java 5 features.
Bring your own hardware
You are required to bring your own laptop for this course, so you learn how to develop within your own environment. A full installation guide for the course software will be provided with your joining instructions.