Modern development with Java 8

Topics covered at JAVA8-01-02
View Schedule & Book More dates available

Next up:

Java 8 isn't your parent’s Java anymore. It is the largest update to Java in its history. Its a very exciting time. Some of the best ideas from functional programming are migrating their way into Java 8. This means easier to read, more flexible code that scales to multicore.

At the end of this course, you will be ready to use Java 8 on your day job and be familiar with the cutting edge programming approaches which allow you to write more flexible and concise code.

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

"Best Development course I've been on in 10 years! I will get the rest of my team to attend this course."

James Callaghan on 27th Oct 2015

"Great course given by great guys who know exactly what they're talking about and how to back that up with good examples. If you don't have the sprit yet to upgrade all your applications to Java 8, just attend their training and you will."

Course Delegate on 18th Dec 2014

"Thanks again for a providing such a great workshop."

Delegate on 18th Dec 2014

About the Authors

Richard Warburton

Richard Warburton is an empirical technologist and solver of deep-dive technical problems. Recently he has written a book on Java 8 Lambdas for O’Reilly. He’s worked as a developer in quite varied areas including Statistical Analytics, Static Analysis, Compilers and Networking.

Jim Gough

Jim Gough is a leader in the London Java Community and helps with the occasional hack day when time permits. He is also a known conference speaker and contributed to the release of Java 8.

Raoul-Gabriel Urma

Raoul-Gabriel Urma is a PhD student in Computer Science at the University of Cambridge. His research centers on programming languages and software engineering. He is an author of the upcoming book Java 8 in Action: Lambdas, Streams, and functional-style programming published by Manning.

Day 1

Lambda Expressions

  • Why Java 8?
  • behaviour parameterisation
  • More flexible code
  • Anonymous classes
  • What is a lambda?
  • Syntax
  • Functional interfaces: where to use lambda expressions?
  • java.util.function
  • 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
  • Filtering
  • Mapping
  • Finding and Matching
  • Reducing
  • minBy/maxBy
  • 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
  • Max/Min
  • Average/Count/Sum
  • Summary statistics
  • Advanced Queries
  • Beyond grouping and partitioning
  • Downstream collectors

Exercise: financial data processing (part 2)

Mutable Reduction

  • Extending the reduce pattern
  • Reducing collector

Day 2

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
  • Command
  • Strategy
  • Observer
  • Template
  • Factory
  • 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
  • CompletableFutures


If you are a Java developer with some professional programming experiencem, 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 requested 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.

If you are unable to bring a laptop for the course, please contact us on +44 20 7183 9040 or email us.