Video description
"A great and concise guide to what’s new in Java8, with plenty of examples to get you going in a hurry."
Jason Lee, Oracle
Java 8 in Action is a clearly written guide to the features of Java 8. It begins with a practical introduction to lambdas, using real-world Java code. Next, it covers the new Streams API and shows how you can use it to make collection-based code radically easier to understand and maintain. It also explains other major Java 8 features including default methods, Optional, CompletableFuture, and the new Date and Time API.
With Java 8's functional features you can now write more concise code in less time, and also automatically benefit from multicore architectures. It's time to dig in!
Inside:
- How to use Java 8's powerful features
- Writing effective multicore-ready applications
- Refactoring, testing, and debugging
- Adopting functional-style programming
- Quizzes and quick-check questions
This book/course is made for programmers familiar with Java and basic OO programming.
Raoul-Gabriel Urma is a software engineer, speaker, trainer, and PhD candidate at the University of Cambridge. Mario Fusco is an engineer at Red Hat and creator of the lambdaj library. Alan Mycroft is a professor at Cambridge and cofounder of the Raspberry Pi Foundation.
The best guide to Java8 that will ever be written!
William Wheeler, ProData Computer Systems
The new Streams API and lambda examples are especially useful.
Steve Rogers, CGTek, Inc.
A must-have to get functional with Java 8.
Mayur S. Patil, MIT Academy of Engineering
NARRATED BY EZRA SIMELOFF
Table of Contents
PART 1: FUNDAMENTALS
Chapter 1. Java 8: why should you care?
Chapter 1. Java’s place in the programming language ecosystem
Chapter 1. Passing code to methods with behavior parameterization
Chapter 1. Functions in Java
Chapter 1. Passing code: an example
Chapter 1. Streams
Chapter 1. Default methods
Chapter 2. Passing code with behavior parameterization
Chapter 2. Behavior parameterization
Chapter 2. Tackling verbosity
Chapter 3. Lambda expressions
Chapter 3. Where and how to use lambdas
Chapter 3. Putting lambdas into practice: the execute around pattern
Chapter 3. Using functional interfaces
Chapter 3. Type checking, type inference, and restrictions
Chapter 3. Method references
Chapter 3. Putting lambdas and method references into practice!
Chapter 3. Similar ideas from mathematics
PART 2: FUNCTIONAL-STYLE DATA PROCESSING
Chapter 4. Introducing streams
Chapter 4. Getting started with streams
Chapter 4. Streams vs. collections
Chapter 4. Stream operations
Chapter 5. Working with streams
Chapter 5. Mapping
Chapter 5. Finding and matching
Chapter 5. Reducing
Chapter 5. Putting it all into practice
Chapter 5. Putting numerical streams into practice: Pythagorean triples
Chapter 5. Building streams
Chapter 5. Streams from functions: creating infinite streams!
Chapter 6. Collecting data with streams
Chapter 6. Reducing and summarizing
Chapter 6. Generalized summarization with reduction
Chapter 6. Grouping
Chapter 6. Collecting data in subgroups
Chapter 6. Partitioning
Chapter 6. The Collector interface
Chapter 6. Developing your own collector for better performance
Chapter 7. Parallel data processing and performance
Chapter 7. Measuring stream performance
Chapter 7. Using parallel streams correctly
Chapter 7. The fork/join framework
Chapter 7. Work stealing
Chapter 7. Spliterator
Chapter 7. Implementing your own Spliterator
PART 3: EFFECTIVE JAVA 8 PROGRAMMING
Chapter 8. Refactoring, testing, and debugging
Chapter 8. From imperative data processing to Streams
Chapter 8. Refactoring object-oriented design patterns with lambdas
Chapter 8. Observer
Chapter 8. Testing lambdas
Chapter 9. Default methods
Chapter 9. API version 2
Chapter 9. Usage patterns for default methods
Chapter 9. Resolution rules
Chapter 10. Using Optional as a better alternative to null
Chapter 10. Problems with null
Chapter 10. Introducing the Optional class
Chapter 10. Chaining Optional objects with flatMap
Chapter 10. Default actions and unwrapping an optional
Chapter 10. Practical examples of using Optional
Chapter 11. CompletableFuture: composable asynchronous programming
Chapter 11. Implementing an asynchronous API
Chapter 11. Make your code non-blocking
Chapter 11. Using a custom Executor
Chapter 11. Pipelining asynchronous tasks
Chapter 11. Combining two CompletableFutures—dependent and independent
Chapter 11. Reacting to a CompletableFuture completion
Chapter 12. New Date and Time API
Chapter 12. Instant: a date and time for machines
Chapter 12. Manipulating, parsing, and formatting dates
Chapter 12. Working with different time zones and calendars
PART 4: BEYOND JAVA
Chapter 13. Thinking functionally
Chapter 13. What’s functional programming?
Chapter 13. Referential transparency
Chapter 13. Recursion vs. iteration
Chapter 14. Functional programming techniques
Chapter 14. Persistent data structures
Chapter 14. Lazy evaluation with streams
Chapter 14. Your own lazy list
Chapter 14. Pattern matching
Chapter 14. Miscellany
Chapter 15. Blending OOP and FP: comparing Java 8 and Scala
Chapter 15. Basic data structures: List, Set, Map, Tuple, Stream, Option
Chapter 15. Functions
Chapter 15. Classes and traits
Chapter 16. Conclusions and where next for Java
Chapter 16. What’s ahead for Java?
Chapter 16. Richer forms of generics
Chapter 16. Value types