Introduction
- ABL: Always Be Learning
- Who is this book for?
- What is this book about?
- What this book is not about
Starting Out
- Part I: Java
Java
- History
- Openness
- The Java Ecosystem
Java Syntax and Conventions
- Java JDK
- Primitives and Arrays
- Classes
- Properties and Methods
- Comments
- Java 5
- Java 6
Java 7
- Language Updates
- Github Repo
- Fork/Join
- New IO (nio)
- JVM Benefits
- Performance Benefits
- Backwards Compatibility
Idiomatic Java 8: Lambdas, Streams, and Dates
- Lambda Expressions
- Comparisons to Java 7
- Default Methods
- Default and Functional
- Multiple Defaults
- Static Methods on Interface
- Streams
- For Each
- Map/Filter/Reduce
- Parallel Array
- Peek
- Limit
- Sort
- Collectors and Statistics
- Grouping and Partitioning
- Comparisons to Java 7
- Optional
- The Billion Dollar Mistake
- Stream Optional
- Nashorn
New Date and Time API
- New Classes
- Creation
- Enums
- Clock
- Period and Duration
- Temporal Adjusters
- Instant
- Time Zones
- Backwards Compatibility
Java 8 Miscellaneous
- Base64
- No More Permanent Generation
- Annotations on Java Types
- Repeating Annotations
- Functional Programming in Java 8
- Backports
Advantages of Java 9
- Language Updates
- Concurrency
- Modularity
- JShell
Java 10 and 11
- Local Variable Types
- Lambda Expression Local Variable Types
Java 12-21
- Release Dates
- Preview Features
- Switch Expressions
- Records
- Multiline Strings
- Pattern Matching Instanceof
- Virtual Threads
- Part II: The Java Ecosystem
Ecosystem Overview
- Continuous Development and Testing
Maven
- What is Maven?
- Using Maven
- Starting a New Project
- Lifecycle
- Dependencies
- Properties
- Maven the Complete Reference
- Executing Code
- Deploying to Maven Central
JUnit
- What is JUnit?
- Hamcrest
- Assumptions
- Parameterized Tests
- Value Source and Arguments
Utilizing Essential Libraries
Logback
- Using SLF4J
- Configuration
- MDC
Hibernate
- Starting Out
- Mappings
- HQL
- Configuration
- Find out More
Guava
- Collections
- Objects
- Concurrency
- Functional Programming
- Optional
- Other Useful Classes
Modern Java Concurrency
- State of Concurrent Programming in Java
- Prominent Models for Concurrency
- Synchronize in Java
- Java Futures
- STM in Clojure
- Actors
- Groovy GPars
RxJava
- Flowable
- Parallel Computing
- Schedulers
- Publishers
- Hot and Cold
- Backpressure
- Part III: JVM Languages
Other JVM Languages
- Why use non-Java Languages?
- Polyglot Programming
- Edge-Craft
- Java.next(): Groovy vs. Scala
Groovy
- What is Groovy?
- Compact Syntax
- List and Map Definitions
- Easy Properties
- GString
- String
- Closures
- Return Optional
- A Better Switch
- Gotcha’s
- Command Chains
- Modules
- Static Type Checking
- Invoke Dynamic Support in Groovy
The Groovy Ecosystem
- Web and UI Frameworks
- Cloud Computing Frameworks
- Build Frameworks
- Testing Frameworks/Code Analysis
- Concurrency
- Others
Gradle
- Getting Started
- Projects and Tasks
- Plugins
- Configuring a Task
- Extra Configuration
- Maven Dependencies
- Gradle Properties
- Multiproject builds
- File Operations
- Exploring
- Build Scans
- Summary
- Online Documentation
Spock
- Introduction
- A Simple Test
- Mocking
- Lists or Tables of Data
- Ranges
- Expecting Exceptions
- Conclusion
Scala
- What is Scala?
- Hello World
- Everything’s an object
- Everything’s an expression
- Match is Switch on Steroids
- Traits as Mixins
- List and Apply
- Tuples
- Maps
- For Expressions
- A Brief History of Scala
- Conclusion
The Scala Ecosystem
- Web Frameworks
- ORM Frameworks
- Build frameworks
- Testing frameworks/Code Analysis
- Concurrency
- Part IV: The Web
RESTful
- REST in Groovy
- REST in Scala
- JAX-RS 1.0
- JAX-RS 2.0
Microservices and Clouds
- Microservices
- OSS
- More Information
- JVM Clouds
Grails
- What is Grails?
- Quick Overview of Grails
- Plugins
- REST in Grails
- Short History of Grails
- Testing
- Cache Plugin
- Grails Wrapper
- Cloud
- Only an Overview
Spark
- Getting Started
- Routes
- Filters
- Sessions, Cookies, and More
Spring Boot
- Gradle Plugin
- SpringBootApplication
- Auto-Cofiguration
- Actuator
- Rest Controller
- Devtools
- Conclusion
Play Framework
- What is Play?
- Quick Overview of Play
- Controllers, Views, Forms
- ORM
- Play 1.x
- Play 2.0
- Getting Started
- Only an Overview
Ratpack
- Script
- Java Main
- Gradle
- Ratpack Layout
- Handlers
- Rendering
- JSON
- Bindings
- Blocking
- Configuration
- Testing
- Summary
Final Thoughts
- The State of the JVM
- The Future
- Contact the Author
Appendix: Groovy for Java Devs10
Appendix: Scala for Java Devs11
Java 8 Cheatsheet
- Lambda Syntax
- Method References
- Functional Interfaces under java.util.function
