GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - Nawaz2000/functional-programming-with-java: Learn Functional Programming with Java using a Hands-on Step by Step Approach

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

8 Commits
8 Commits

Folders and files

NameName
Last commit message
Last commit date
src/programming
src/programming
 
 
code.md
code.md
 
 
exercises.md
exercises.md
 
 
file.txt
file.txt
 
 
notes-java.md
notes-java.md
 
 
readme.md
readme.md
 
 

Repository files navigation

Functional Programming with Java

Learn Functional Programming with Java using a Hands-on Step by Step Approach

Wanna start playing with Functional Programming? Want to write awesome Java code with Functional Programming using Streams, Lambda Expressions, Functional Interfaces and Method References? Want to make your Java Programs more performant and parallelizable using Functional Programming?

Functional Programming is an essential skill for Java Programmers today.

Are you ready to learn about Functional Programming and take the next step in your programming career?

Do you want to join 300,000+ learners having Amazing Learning Experiences with in28Minutes?

Look No Further!

Required Tools

  • Java 9+
  • Eclipse - Oxygen+ - (Embedded Maven From Eclipse)

Installing Guides

  • Playlist - Installing Java, Eclipse & Embedded Maven

Troubleshooting Installations

  • Eclipse and Embedded Maven
    • Troubleshooting Guide - https://github.com/in28minutes/in28minutes-initiatives/tree/master/The-in28Minutes-TroubleshootingGuide-And-FAQ#tip--troubleshooting-embedded-maven-in-eclipse
    • PDF - https://github.com/in28minutes/SpringIn28Minutes/blob/master/InstallationGuide-JavaEclipseAndMaven_v2.pdf
    • GIT Repository For Installation - https://github.com/in28minutes/getting-started-in-5-steps

Course Overview

Functional Programming was introduced into Java in Java 8. Additional Functional Programming Enhancements were introduced in Java 9.

In this handson course, we will learn to write awesome Java code with Functional Programming. You will learn the basics of Functional Programming - Lambda Expressions, Method References, Streams and Functional Interfaces.

This course would be a perfect first step as an introduction to Functional Programming.

You will be using using Eclipse (Java IDE) and Java 9 in this course. We will help you set up each one of these.

What you'll learn

  • You will learn to write great Java code with Functional Programming
  • You will solve a number of Java Puzzles and Exerices using Functional Programming
  • You will learn the Fundamentals of Functional Programming - Lambda Expressions, Method References, Streams and Functional Interfaces
  • You will learn about intermediate and terminal Stream operations - map, reduce, forEach, filter, distinct, sorted
  • You will learn to simplify your Java code to play with List and Map using Functional Programming
  • You will learn about a variety of Functional Interfaces - Predicate, Consumer, Supplier, BinaryOperator and Function
  • You will learn to play with Java Files and Threads using Functional Programming
  • You will learn some fundamentals of Functional Programming - Behavior Parameterization and Higher Order Functions
  • You will Join 300,000 Learners having AMAZING LEARNING Experiences with in28Minutes

Requirements

  • You have an attitude to learn while having fun :)
  • You have some programming experience with Java
  • You DO NOT need to have any experience with Functional Programming
  • We will help you install Eclipse and Java

Who is this course for

  • You are a Java Developer wanting to learn about Functional Programming
  • You are a Java Developer and would like to discover a new approach to parallelizing your code

Commands Executed during the course

System.out.println("Ranga")
List<Integer> numbers = List.of(12, 9, 13, 4, 6, 2, 4, 12, 15);
numbers.stream().reduce(0, (x,y)->x+y)
numbers.stream().reduce(0, (x,y)->x)
numbers.stream().reduce(0, (x,y)->y)
numbers.stream().reduce(0, (x,y)-> x>y ? x:y)
numbers.stream().reduce(Integer.MIN_VALUE, (x,y)-> x>y ? x:y)
numbers.stream().reduce(Integer.MIN_VALUE, (x,y)-> x>y ? y:x)
numbers.stream().reduce(Integer.MAX_VALUE, (x,y)-> x>y ? y:x)
numbers
numbers
numbers.stream().reduce(0, (x,y) -> x*x + y*y)
numbers.stream().map(x -> x*x).reduce(0, Integer::sum)
numbers.stream().map(x -> x*x*x).reduce(0, Integer::sum)
numbers.stream().filter(x -> x%2==1).reduce(0, Integer::sum)
numbers.stream().filter(x -> x%2==0).reduce(0, Integer::sum)
numbers.stream().distinct().forEach(System.out::println)
numbers
numbers.stream().sorted().forEach(System.out::println)
numbers.stream().distinct().sorted().forEach(System.out::println)
List<String> courses = List.of("Spring", "Spring Boot", "API" , "Microservices","AWS", "PCF","Azure", "Docker", "Kubernetes");
courses
courses.stream().sorted().forEach(System.out::println)
courses
courses.stream().sorted().forEach(System.out::println)
courses.stream().sorted(Comparator.naturalOrder()).forEach(System.out::println)
courses.stream().sorted(Comparator.reverseOrder()).forEach(System.out::println)
courses.stream().sorted(Comparator.comparing(str -> str.length())).forEach(System.out::println)
numbers
courses
courses.stream().map(x -> x.length()).collect(Collectors.toList())
numbers.stream().map(x -> x*x).collect(Collectors.toList())
Supplier<String> supplier = () -> {return "Ranga";};
Consumer<String> consumer = (str) -> { System.out.println(str);System.out.println(str);};


numbers.stream()
List<Integer> numbers = List.of(12, 9, 13, 4, 6, 2, 4, 12, 15);
numbers.stream()
Stream.of(12, 9, 13, 4, 6, 2, 4, 12, 15).count()
Stream.of(12, 9, 13, 4, 6, 2, 4, 12, 15).reduce(0, Integer::sum)
Stream.of(12, 9, 13, 4, 6, 2, 4, 12, 15)
int[] numberArray = {12, 9, 13, 4, 6, 2, 4, 12, 15};
Arrays.stream(numberArray)
Arrays.stream(numberArray).sum()
Arrays.stream(numberArray).average()
Arrays.stream(numberArray).min()
Arrays.stream(numberArray).max()
IntStream.range(1,10)
IntStream.range(1,10).sum()
IntStream.rangeClosed(1,10).sum()
IntStream.iterate(1, e -> e + 2).limit(10).sum()
IntStream.iterate(1, e -> e + 2).limit(10).peek(System.out::println).sum()
IntStream.iterate(2, e -> e + 2).limit(10).peek(System.out::println).sum()
IntStream.iterate(2, e -> e * 2).limit(10).peek(System.out::println).sum()
IntStream.iterate(2, e -> e * 2).limit(10).boxed().collect(Collectors.toList())
Integer.MAX_VALUE
Long.MAX_VALUE
IntStream.rangeClosed(1,50).reduce(1, (x,y)->x*y)
LongStream.rangeClosed(1,50).reduce(1, (x,y)->x*y)
LongStream.rangeClosed(1,50).reduce(1L, (x,y)->x*y)
LongStream.rangeClosed(1,10).reduce(1, (x,y)->x*y)
LongStream.rangeClosed(1,20).reduce(1, (x,y)->x*y)
LongStream.rangeClosed(1,40).reduce(1, (x,y)->x*y)
LongStream.rangeClosed(1,50).mapToObj(BigInteger::valueOf).reduce(BigInteger.ONE, BigInteger::multiply)

courses.stream().collect(Collectors.joining(" "))
courses.stream().collect(Collectors.joining(","))
"Spring".split("")
courses.stream().map(course -> course.split("")).collect(Collectors.toList())
courses.stream().map(course -> course.split(""))
courses.stream().map(course -> course.split("")).flatMap(Arrays::stream).collect(Collectors.toList())
courses.stream().map(course -> course.split("")).flatMap(Arrays::stream).distinct().collect(Collectors.toList())
List<String> courses = List.of("Spring", "Spring Boot", "API" , "Microservices","AWS", "PCF","Azure", "Docker", "Kubernetes");
List<String> courses2 = List.of("Spring", "Spring Boot", "API" , "Microservices","AWS", "PCF","Azure", "Docker", "Kubernetes");
courses.stream().flatMap(course -> courses2.stream().map(course2 -> List.of(course,course2))).collect(Collectors.toList())
courses.stream().flatMap(course -> courses2.stream().map(course2 -> List.of(course,course2))).filter(list -> list.get(0).equals(list.get(1))).collect(Collectors.toList())
courses.stream().flatMap(course -> courses2.stream().map(course2 -> List.of(course,course2))).filter(list -> !list.get(0).equals(list.get(1))).collect(Collectors.toList())
courses.stream().flatMap(course -> courses2.stream().filter(course2 -> course2.length()==course.length()).map(course2 -> List.of(course,course2))).filter(list -> !list.get(0).equals(list.get(1))).collect(Collectors.toList())
courses.stream().filter(courses -> courses.length()>11).map(String::toUpperCase).findFirst()
courses.stream().peek(System.out::println).filter(courses -> courses.length()>11).map(String::toUpperCase).peek(System.out::println).findFirst()
courses.stream().peek(System.out::println).filter(courses -> courses.length()>11).map(String::toUpperCase).peek(System.out::println)
$4.findFirst()
List<String> courses = List.of("Spring", "Spring Boot", "API" , "Microservices","AWS", "PCF","Azure", "Docker", "Kubernetes");
courses.replaceAll( str -> str.toUpperCase())
List<String> modifyableCourses = new ArrayList(courses);
modifyableCourses.replaceAll(str -> str.toUpperCase())
modifyableCourses
modifyableCourses.removeIf(course -> course.length()<6)
modifyableCourses

Next Steps

Todo

  • Course Promotion Emails/Posts
    • 2 Emails on Udemy
    • 2 Emails to Email List
  • Create YouTube Course Preview Video
    • Add YouTube Course Preview Video as End Video for all videos
    • Make it the YouTube Default Video
  • Release atleast 20 small videos - one a day on Youtube
  • Do atleast 3 Youtube live sessions
  • After a Month
    • UFB and Packt

Later

  • Creating a Custom Functional Interface and Creating a Lambda Expression matching it!

  • Clarify on Passing Behavior as a Parameter.

  • Collectors.toMap(key, value)

  • What are the constraints in using parallel() on the Streams?

  • collect(ArrayList::new, ArrayList::add, ArrayList::addAll)

  • partitioningBy

Behavior Parameterization -> Tracing Performance of methods -> Pass function to track as a parameter -> Externalize Sort Behavior as a parameter

Function Composition

  • Function<String, Integer> lengthBis = unNullify.andThen(length);
  • Function<String, Integer> lengthBis = length.compose(unNullify); Consumer.andThen
  • Predicate startsWithJAndLengthIs7 = startsWithJ.and(lengthIs7);
  • Predicate lengthIs9orError = lengthIs9.or(equalsError);

Design Patterns

  • Decorator Pattern
  • Template Method - Execute Around Pattern
  • Strategy Pattern - Even/Odd/Prime

Play based on Position:

  • IntStream.range(0, input.size()).filter(pos -> input.get(pos).length() > pos).mapToObj(pos -> input.get(pos)).collect(Collectors.toList());

Lambda Expressions in Unit Tests => assertThrows

Currying f(x,y) = (g(x))(y)

  • int function(BiFunction<Integer,Integer,Integer> func, Integer value1, Integer value2) { return func.apply(value1,value2); }
  • function((x,y) -> x + y, 2, 3)
  • BiFunction<Integer, Integer, Integer> curry(BiFunction<Integer,Integer,Integer> func) { return (x,y) -> func.apply(x,y); }
  • BiFunction<Integer, Integer, Integer> add = curry( (x,y) -> x+y) add.apply(1,2)

Map Operations

  • keys.forEach(key -> map.compute(key, (k, v) -> v == null ? k : v.toUpperCase()));
  • map.computeIfAbsent,Present,merge,putIfAbsent, computeIfPresent

About

Learn Functional Programming with Java using a Hands-on Step by Step Approach

Resources

Readme
Activity

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.