Java functional programming comes into existence after Java 8th version onwards. Functional programming means a fundamental change in the approach to problem-solving. Functional programming allows programming with expressions (declaring functions), passing functions as arguments, and using functions as statements.
Types of Functional Programming
ADVERTISEMENT Popular Course in this category PROGRAMMING LANGUAGES - Specialization | 54 Course Series | 4 Mock TestsStart Your Free Software Development Course
Web development, programming languages, Software testing & others
Before we get into the functional programming concept, let’s see the difference between Functional and structured programming. Structured programming emphasizes logical structure or process, whereas Functional programming mainly focuses on data. Structured programming follows a top-down approach, whereas Functional programming follows from bottom to top.
Functional programming is separated into tiny run-time entities called objects, whereas structured programming separates small units or functions. Structured programming is less secure, whereas Functional programming is highly secure. Structured programming can’t handle complex problems, whereas Functional programming handles any level of a complex problem.
Given below are the examples mentioned:
Syntax:
objectName.stream();
Code:
Animal.java
package com.streams; public class Animal { String name; String color; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public Animal(String name, String color) { super(); this.name = name; this.color = color; } }
AnimalNames.java
package com.streams;//creating package //importing required packages to the code import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class AnimalNames { public static void main(String[] args) { getMyDogNames();//calling the method } private static void getMyDogNames() { Animal a1=new Animal("Puppy","black"); //creating a object for animal class Animal a2=new Animal("Tommy","brown");//creating a object for animal class Animal a3=new Animal("Zimmy","white");//creating a object for animal class List<Animal> persons = Arrays.asList(a1,a2,a3); //passing object references to list String dogName = persons.stream() //covert all elements into stream .filter(name -> "Puppy".equals(name.getName()))//filtering given elements from persons class .map(Animal::getName) //persons elements iterate over map .findAny()//find out the given element passed from filter .orElse("");// System.out.println("Dog Name :" + dogName); //print the dog name List<String> collect = persons.stream() .map(Animal::getName) .collect(Collectors.toList());//collecting all names from list System.out.println("All Dog names"); collect.forEach(System.out::println);//iterating collection with for each loop } }
Output:
Explanation:
Syntax:
(arguments) -> { //code for implementation } Arguments: argument-list can be have values or no values Example: arguments1, arguments2, arguments3,…… ->: Joins code implementation and arguments.
Syntax:
(argument1) -> { //code for implementation }
Code:
package com.lambda;//creating a package interface Square{ //creating interface for quare public int getArea(int side); //create a method for get area } public class AreaOfSquare{ //As we are working with Lambda expression so no need to implement interface of square public static void main(String[] args) { Square area=(side)->{ // Lambda expression with only one argument. Return side*side; //returning area }; System.out.println(“Area of Square=>”+area.getArea(10)); //printing area by calling interface getArea method } }
Output:
Explanation:
Syntax:
() -> { //code for implementation }
Code:
package com.lambda;//creating a package interface Name{ //creating interface for Name public String getMyName(); //create a method for get name } public class MyNameString{ //As we are working with Lambda expression so no need to implement interface of Name public static void main(String[] args) { Name name=()->{ // Lambda expression with out argument. return "Hi, Amardeep!"; //returning name }; System.out.println(name.getMyName()); //printing name by calling interface getMyName method } }
Output:
Explanation:
Syntax:
Class-Name:: static method name
Code:
package method.reference;//creating package interface RectangleArea{ //creating RectangleArea interface public int getArea(int l,int b); //creating method getArea in interface } public class StaticMethodReference { //creating a classs public static int showRectangleArea(int length, int breadth){ //creating method for getting rectangle area return length*breadth; } public static void main(String[] args) { // Referring static method RectangleArea area = StaticMethodReference::showRectangleArea; //calling class name with method name // Calling interface method int outArea=area.getArea(10,20); System.out.println("Area of rectangle :"+outArea);//printing area } }
Output:
Explanation:
Functional programming is achieved with streams, lambda expressions, and method references. It reduces lines of code and improves performance.
The above is the detailed content of Functional Programming in Java. For more information, please follow other related articles on the PHP Chinese website!