首頁 > Java > java教程 > Java 中的函數式程式設計

Java 中的函數式程式設計

WBOY
發布: 2024-08-30 16:03:56
原創
503 人瀏覽過

Java 函數式程式設計在 Java 8th 版本之後出現。函數式程式設計意味著解決問題的方法發生了根本性的變化。函數式程式設計允許使用表達式(聲明函數)進行程式設計、將函數作為參數傳遞以及使用函數作為語句。

函數式程式設計的型別

廣告 該類別中的熱門課程 程式語言 - 專業化 | 54 課程系列 | 4 次模擬測驗

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

  • 流函數式程式設計
  • Lambda 表達式函數式程式設計
  • 函數式程式設計方法參考

函數式程式設計在 Java 中是如何運作的?

在討論函數式程式設計概念之前,讓我們先來看看函數式程式設計和結構化程式設計之間的差異。結構化程式設計強調邏輯結構或過程,而函數式程式設計主要關注資料。結構化程式設計遵循自上而下的方法,而函數式程式設計遵循自下而上的方法。

函數式程式設計分成稱為物件的微小運行時實體,而結構化程式設計則分為小單元或函數。結構化程式設計的安全性較低,而函數式程式設計的安全性很高。結構化程式設計無法處理複雜問題,而函數式程式設計可以處理任何程度的複雜問題。

Java 函數式程式設計範例

下面給出了提到的範例:

範例#1:串流函數式程式設計

文法:

objectName.stream();
登入後複製

代碼:

動物.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
}
}
登入後複製

輸出:

Java 中的函數式程式設計

說明:

  • 在 Java 類別中,我們產生 setter 和 getter。
  • 我們在Java類別中編寫了列印狗名字的主要程式碼。
  • 在程式碼本身中,在註解中提及每一行的用途。
  • 如果我們在結構化程式設計中編寫相同的程式碼,我們需要為每個方法編寫更多行,如filter()、collector()、findAny()、map()等。因此,大多數函數式程式設計開發優先於結構化程式設計。

範例 #2:Lambda 表達式

  • lambda 表達式用來用表達式來表示方法介面。
  • 它有助於迭代、過濾和從集合中提取資料。
  • Lambda 表達式介面實作是一個函數式介面。
  • 減少了大量程式碼。
  • lambda 表達式被視為函數,因此 java 編譯器無法建立 .class

文法:

(arguments) ->
{
//code for implementation
}
Arguments:  argument-list can be have values or no values
Example: arguments1, arguments2, arguments3,……
->: Joins code implementation and arguments.
登入後複製
a.具有單一參數的 Lambda 表達式

文法:

(argument1) ->
{
//code for implementation
}
登入後複製
範例 – AreaOfSquare.java

代碼:

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
}
}
登入後複製

輸出:

Java 中的函數式程式設計

說明:

  • 上面建立了一個Square接口,並在AreaOfSquare類別內部編寫了lambda表達式。
  • 在 lambda 表達式中,寫出正方形面積的邏輯。
  • 最後一行透過呼叫介面方法 getArea() 印出 100 的正方形的面積。
b.  不含參數的 Lambda 表達式

文法:

() ->
{
//code for implementation
}
登入後複製
範例 – MyNameString.java

代碼:

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
}
}
登入後複製

輸出:

Java 中的函數式程式設計

說明:

  • 上面建立了一個介面 Name 並在 MyNameString 類別中編寫了一個不含參數的 lambda 表達式。
  • 在 lambda 表達式中,寫回字串的邏輯。
  • 在列印的最後一行中,字串是 Hi, Amardeep!透過呼叫介面方法 getMyName().

範例#3:方法參考

  • 方法引用用來引用函數式介面的方法。
  • 這是 lambda 表達式的一種更簡單的形式。
  • 如果每次都使用lambda表達式指向一個方法,我們可以使用方法參考來代替方法引用。

文法:

Class-Name:: static method name
登入後複製
範例 – StaticMethodReference.java

代碼:

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
}
}
登入後複製

輸出:

Java 中的函數式程式設計

說明:

  • 在上面建立了一個介面 Rectangle,並在 StaticMethodReference 類別內部編寫了靜態方法參考程式碼。
  • 在 showRectangleArea() 方法中,寫出矩形面積的邏輯。
  • 下一行將靜態方法參考傳遞給 RectangleArea 介面參考。
  • 接下來,透過呼叫 getArea(10,20) 方法來列印矩形區域。
  • 輸出為 200。

結論

函數式程式設計是透過流、lambda 表達式和方法引用來實現的。它減少了程式碼行並提高了效能。

以上是Java 中的函數式程式設計的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板