Better-Programming
Even though interfaces and abstract classes have many similarities at first look, especially after introducing default methods, they have different use cases and capabilities.
Iterating data structures is one of the most common tasks. Everyone knows the classics, like for or while. But there are more ways to iterate in Java, providing a lot more functionality.
Dealing with date and time is a cumbersome task in many programming languages. But with Java 8, the JDK provides us with a comprehensive and completely new API, changing the way we deal with time-related concepts.
The concept of map/filter/reduce is a cornerstone of any functional programming. Data pipelines consist of one or more intermediate operations that represent one of these three methods.
Java is often criticized as being too verbose. One aspect contributing to this characterization is the requirement to specify every type explicitly, which leads to a lot of additional noise.
java.util.Locale is used to format dates, numbers, currency, and more. But with JDK 9, a few changes were introduced, leading to subtle (and sometimes not so subtle) bugs.