
Meet an experienced Java certified instructor and explore the latest Java syntax, technology, and terminology from Java 8 through 13, designed for beginners and seasoned programmers preparing for interviews.
Explore the difference between imperative and declarative programming in Java, from step-by-step instructions to describing outcomes using lambda, streams, and functional programming.
Learn lambda expressions, functional interfaces, and stream operations through hands-on examples like bank transfers. Explore optional, parallel streams, collectors, new date–time API, and other Java 9–13 features.
Learn how to download and install the Java Development Kit on Windows, accept the license, run the installer, and handle the reinstallation prompt.
Install IntelliJ IDEA on Windows by downloading the installer, choosing default locations, creating the desktop shortcut, associating with Java, then run and finish setup.
Download the Java Development Kit 13 from Oracle on a Mac, accept the license, open the dmg, run the installer, enter your password, and verify that Java 13.0.2 is installed.
Download the IntelliJ IDEA Community Edition, move it to the Applications folder, skip importing settings, choose the lights UI theme, and start using the IDE.
Configure IntelliJ IDEA for smoother Java development by enabling auto import on the fly, optimizing imports, enabling line numbers, adjusting code folding, and fine tuning appearance settings.
Copy the GitHub repository link, import the project into your IDE, and complete setup to access the source code. You can also browse the repository directly without cloning.
Learn how java lambda expressions create anonymous functions with a parameter list, braces and an arrow, enabling compact implementations of functional interfaces with a single abstract method, using type inference.
Create a Java project, define a hello world interface with an abstract say hello method, then replace the traditional implementation with a lambda expression that prints hello world.
Demonstrate how lambda expressions simplify hello world, increment by 5, and string concatenation by inferring return types and reducing boilerplate, comparing traditional and lambda implementations.
Explore a Java 8+ runnable example by implementing an animal interface with and without lambda expressions, run threads to sum ten numbers, and print the result 45.
Demonstrates implementing a callable using a lambda expression to sum numbers from 0 to 5000, with two callables executed by an executor service and verifying total with a stream sum.
Explore Java functional interfaces defined by a single abstract method, with optional default and static methods, enabling backward compatibility and lambda expressions, including consumer, supplier, and predicate.
Explore the Java 8+ consumer functional interface, its accept method, and how it enables one-argument operations in functional programming with block statements through practical examples.
Explore Java8+ consumer functional interface usage with for each and lambda expressions to print instructors, names, and courses, and filter by years of experience and online courses.
Explore java eight+ specialized consumers: IntConsumer, LongConsumer, and DoubleConsumer that accept only specific numeric arguments, with examples showing their usage and printed results.
Introduce the BiConsumer functional interface in Java 8+, showing how it accepts two arguments, performs operations, and prints results without returning a value through practical two-argument examples.
Explore Java 8's BiConsumer functional interface by implementing examples that print instructor names and genders, list courses, and identify online instructors using lambda expressions.
Explore the Java predicate functional interface, its test method, and how to compose predicates with and, or, and negate for concise, reusable conditions.
Explore specialized predicates in Java: int, long, and double predicates with predicate examples. Create a class PredicateExample to define int, long, and double predicates, test values, and print outcomes.
Explore Java 8+ predicates and BiConsumer with a lambda example that filters online instructors by experience over ten years and prints each instructor's name and courses.
Explore the Java 8+ BiPredicate functional interface by building a two-argument predicate that checks online status and years of experience, and apply a corresponding consumer to print matching instructors.
This lecture introduces the Java function interface for functional programming, demonstrating apply, compose, and identity, with examples that map numbers to square roots and transform strings to lowercase then concatenate.
Apply the function interface to convert a list of instructors into a map of names to years of experience, using a lambda and a predicate for online courses.
Explore the BiFunction interface in Java, which takes two inputs and returns a result via apply, illustrating functional programming concepts with maps and predicates.
Explore the unary operator in Java, a specialized function where input and output share the same type. See int, long, and double variants, with apply and examples.
Explore the Java binary operator interface, a function interface that takes two values of the same type and returns a value of that type, with integer, long, and double specializations.
Explain the Java supplier interface, a no-argument function that returns a value via get, acting as a factory; implement and reuse a single supplier for tasks like generating random numbers.
Replace lambdas with method references in Java 8+ using the :: syntax, mastering static, instance, and constructor references. See examples converting square and lowercase methods and a predicate check.
Learn how to convert lambda expressions to method references in Java 8+ with practical examples, including predicates and static method references, and how to replace lambdas with method references.
Explore converting lambda expressions to method references in Java 8+ by refactoring a predicate into a static boolean method and using it to check greater than 10 years of experience.
Learn to use constructor references with a functional interface to instantiate objects, design an instructor factory interface with a matching abstract method, and implement the example.
Explore how lambda expressions share the scope of nested blocks, enforce effectively final constraints on local variables, and require class level or final-like variables for safe capture.
master real world bank transfers with java 8+ lambda expressions, using an account factory to create bank accounts and execute 20 parallel transfers with threads.
Discover how the Java 8 stream API adds a pipeline layer over collections, enabling map, filter, sort, collect, and reduce with lambda expressions and parallel processing.
Create a stream-based workflow to map instructor names to online courses using predicates for online status and years of experience, then collect and print the results.
Learn how Java streams use intermediate operators like filter and terminal operations like collect, and why a stream cannot be reused after creation, as you trace the pipeline.
Explore the key differences between collections and streams in Java, showing how streams derive from collections and support lazy, one-time traversal, while collections allow add and remove operations.
Debug stream operations in Java using two approaches: the trace and chain tool in the debugger, and the stream API's peek method, and observe elements through filter and collect steps.
Explore the map operation in streams to convert elements, map to new forms (like names to uppercase), and collect results into lists or sets while preserving order.
Learn how flatMap combines map and flatten operations to flatten a stream of instructor courses, collect results, and remove duplicates with a set.
Explore Java streams operations such as distinct, count, sorted, anyMatch, allMatch, and noneMatch to filter, remove duplicates, sort, and evaluate predicates on a list of courses.
Explore custom sorting with comparator in Java 8 and later, using streams to sort, collect results, and print in order or reverse order, with debugging steps.
Explain how the stream filter uses a predicate to lazily produce elements, with an example that sorts and prints instructors with more than ten years of experience.
Learn how Java streams reduce uses an identity and a binary operator to combine elements, including handling optional results and examples of sum and multiplication.
Learn to use streams and reduce to identify the instructor with the most years of experience. Handle optional results safely and refactor the code with a ternary operator.
Explore map, filter, and reduce on streams to calculate total years of instructor experience, filtering online courses and using Integer::sum for efficient aggregation.
Explore computing the maximum value from a list of integers using a Java stream and the reduce method, including optional result handling and identity-based reduction.
Learn to compute the minimum with java streams and the min operator, using optional results and reduce. See a 1–7 number list and compare identity usage and printing the minimum.
Explains Java streams limit and skip operations by taking the first n elements or skipping the first n elements, with a code example printing and collecting results from a list.
Explore Java streams by comparing findFirst and findAny, explaining optional results, determinism versus non-determinism, and how parallel streams can affect the chosen element.
Explore Java streams using the stream factory methods of, iterate, and generate to create finite and infinite streams from data, with seeds and suppliers.
Explore numeric streams in Java 8+ by examining streams of primitive integers and primitive doubles, and understand how these streams support efficient numeric processing.
This lecture introduces int streams in java 8+, showcasing techniques to generate integer streams: of, range, rangeClosed, iterate, generate, and random with practical examples.
Explore generating long streams in Java 8+, including even numbers from zero, random long values with a limit, and range and rangeClosed methods producing inclusive and exclusive sequences.
Explore Java 8 double streams by creating streams from literal values, generating with random values and limits, and converting sequences to double streams for printing and verification.
Learn how to use java stream aggregate functions, including sum, min, max, and average, by calculating over a 0 to 1000 numeric stream with optional results and printing the outcomes.
Explore boxing and unboxing in Java by converting primitives to wrapper objects and back, using lists and streams to collect, map, and sum numbers.
Explore java streams with mapToObj, mapToLong, and mapToDouble to transform elements into objects, longs, and doubles, illustrated by a brand name id class and random tokens.
Explore Java streams' joining collectors in Java 8 and later, using overloads with no delimiter, with a delimiter, and with prefix and suffix to concatenate input elements in encounter order.
Explore collectors counting in Java streams and compare it with stream count, revealing how counting supports downstream tasks like grouping by string length.
Demonstrate how the collectors mapping operator combines a function with a downstream collector to map elements and build groups, e.g., grouping by instructor years of experience and names.
Learn how Java 8+ minBy and maxBy collectors return optional minimal or maximal elements using a comparator, with practical downstream usage in stream operations.
Explore Java 8+ collectors like summingInt and averagingInt to compute sums and averages from streams, with an example averaging instructors' years of experience.
Explore how grouping by classifier in Java 8+ uses collectors.groupingBy to categorize strings and instructors by length, gender, and experience.
Explore the second overload of groupingBy with a classifier and downstream filtering. Group names by length with a contains-e filter; classify instructors as senior or junior, filtered by online courses.
Explore the Java 8+ groupingBy method, detailing classifier and downstream parameters, and implement a custom grouping by using a LinkedHashMap and HashMap in a stream.
Group instructors by online versus offline courses and compute the maximum years of experience using maxBy and minBy. Use collectingAndThen and summarizingInt to derive averages and summary statistics.
Explore partitioning by a predicate in Java streams using collectors.partitioningBy, returning a boolean map and a downstream collection, demonstrated with instructors' years of experience.
******* Course Overview *******
Welcome to this Amazing course on Java Latest Programming
This course will cover important developer features added in:
Java 13, Java 12, Java 11, Java 10, Java 9, Java 8
The course will provide an in-depth understanding of modern java syntax, technology and terminology
The course is for beginners are well as for experienced programmers
If you are taking this course for an upcoming interview, this course covers most of the topics that are asked during Java programming interviews, I am telling you this from my personal experience as I asked these topics myself to gauge candidates understanding of latest java programming and it's syntax
Each of my courses come with:
Amazing Hands-on Step By Step Learning Experiences
Real Implementation Experience
The below are the list of modules covered in this course.
***************Course details**********************
Section 1: Introduction
Introduction
Windows - Java Development Kit Installation Overview
Windows - Installing Intellij IDEA
Mac - Java Development Kit Installation Overview
Mac - Installing Intellij IDEA
Intellij IDEA Configuration
Git Repository Link
Development Environment Setup - Import Code
Section 2:Lambda Expressions - Java8+
Java8+ : What is Lambda
Java8+ : Lambda Expression (Part 1)
Java8+ : Lambda Expression (Part 2)
Java8+ : Runnable Example With Lambda
Java8+ : Comparator Example With Lambda
Java8+ : Callable Example With Lambda
Section 3: Functional Interfaces and Lambdas - Java8+
Java8+ : Functional Interfaces
Java8+ : Consumer Functional Interface (Part 1)
Java8+ : Consumer Functional Interface (Part 2)
Java8+ : IntConsumer, LongConsumer, DoubleConsumer
Java8+ : BiConsumer Functional Interface (Part1)
Java8+ : BiConsumer Functional Interface (Part2)
Java8+ : Predicate Functional Interface (Part1)
Java8+ : Predicate Functional Interface (Part 2)
Java8+ : IntPredicate, LongPredicate, DoublePredicate
Java8+ : Predicate & BiConsumer
Java8+ : BiPredicate Functional Interface
Java8+ : Function (Part 1)
Java8+ : Function (Part 2)
Java8+ : BiFunction
Java8+ : Unary Operator
Java8+ : Binary Operator
Java8+ : Supplier
Java8+ : Method Reference (::)
Java8+ : Examples of Method Reference
Java8+ : Convert to Method Reference
Java8+ : Constructor Reference
Section 4:Lambda Variable Scope - Java8+
Java8+ : Variable Scope, Final & Effectively Final
Section 5:RealWorld Example Using Lambda - Java8+
Java8+ : Bank Transfer Example
Section 6:Streams - Java8+
Java8+ : Stream Introduction (Part 1)
Java8+ : Stream Introduction (Part 2)
Java8+ : Inside Streams
Java8+ : Collections vs Streams
Java8+ : Debugging Stream
Section 7:Stream Operations - Java8+
Java8+ : map()
Java8+ : flatMap()
Java8+ : distinct(), count(), sorted(), allMatch()...
Java8+ : Customized sort using comparator
Java8+ : filter()
Java8+ : reduce() (Part 1)
Java8+ : reduce (Part 2)
Java8+ : map + filter + reduce
Java8+ : max() with stream and reduce
Java8+ : min() with stream and reduce
Java8+ : limit() and skip()
Java8+ : findAny() and findFirst()
Section 8:Stream Generators - Java8+
Java8+ : Generating Stream with of(), iterate(), generate()
Section 9:Numeric Streams - Java8+
Java8+ : Introduction to Numeric Streams
Java8+ : IntStream
Java8+ : LongStream
Java8+ : DoubleStream
Java8+ : sum(), max(), min(), average()
Java8+ : Boxing, Unboxing
Java8+ : mapToObj(), mapToLong, mapToDouble()
Section 10:Collectors Operations - Java8+
Java8+ : joining
Java8+ : counting()
Java8+ : mapping()
Java8+ : minBy(), maxBy()
Java8+ : summingInt(), averagingInt()
Java8+ : groupingBy (Part 1)
Java8+ : groupingBy (Part 2)
Java8+ : groupingBy (Part 3)
Java8+ : maxBy(), minBy(), collectingAndThen(), summarizingInt()
Java8+ : partitioningBy()
Section 11:Parallel Streams - Java8+
Java8+ : Introduction to Parallel Streams
Java8+ : Sequential vs Parallel Performance (Part 1)
Java8+ : Sequential vs Parallel Performance (Part 2)
Section 12:Optional - Java8+
Java8+ : Introduction to Optional
Java8+ : empty(), ofNullable(), Of()
Java8+ : orElse(), orElseGet(), orElseThrow()
Java8+ : IfPresent(), isPresent()
Section 13:Default And Static Methods Of Interfaces - Java8+
Java8+ : Introduction of Default And Static Methods
Java8+ : Default Methods
Java8+ : Creating an Interface with Default/Static Methods
Java8+ : Multiple Inheritance
Java8+ : Conflicts in Multiple Inheritance
Section 14:New DateTime APIs : Java8+
Java8+ : new DateTime Introduction
Java8+ : LocalDate - get and create
Java8+ : LocalDate - modify
Java8+ : LocalTime - get and create
Java8+ : LocalTime - modify
Java8+ : LocalDateTime - get, create and modify
Java8+ : LocalDate and LocalTime from LocalDateTime
Java8+ : Duration
Java8+ : Instant
Java8+ : TimeZones - ZonedDateTime, ZoneId
Java8+ : LocalDateTime to ZonedDateTime
Java8+ : Convert java.util.date and java.sql.date to LocalDateTime/LocalDate
Section 15:Java Shell (REPL) - Java 9+
Java9+ : Java Environment Variable Setup
Java9+ : Introduction to JShell
Java9+ : Getting Started With JShell
Java9+ : Snippet, List and Drop
Java9+ : JShell Shortcuts
Java9+ : Creating Classes
Java9+ : IntelliJ IDEA JShell
Section 16:Module System - Java9+
Java9+ : Introduction to Module System
Java9+ : Example Modular Application
Java9+ : Creating a Modular Application
Java9+ : Modular Application and Maven
Section 17:Factory Methods For Collection - Java9+
Java9+ : Collections Factory Methods
Section 18:Try-with-resources - Java9+
Java9+ : Try-with-resources
Section 19:Type Interference with var - Java10+
Java10+ : var type with examples
Section 20:GC1 Improvements - Java10+
Java9+ : Garbage collection first algorithm improvements
Section 21:var with Lambda - Java11+
Java11+ : Adding var to Lambda
Section 22:Epsilon GC - Java11+
Java11+ : Epsilon GC
Section 23:New Http Client - Java 11+
Java11+ : Http Client API
Section 24:Switch Expression - Java 12+
Java12+ : Switch Expression Intro with Example
Java12+ : Switch Expression with action in cases
Section 25:Switch Expression Enhancements - Java 13+
Java12+ : Switch Expression with yield
Section 26:TextBlocks - Java13+
Java13+ : Multiline TextBlocks