Java での関数型プログラミング

WBOY
リリース: 2024-08-30 16:03:56
オリジナル
465 人が閲覧しました

Java 関数型プログラミングは、Java 8 番目 バージョン以降に登場します。関数型プログラミングは、問題解決へのアプローチに根本的な変化をもたらすことを意味します。関数型プログラミングでは、式 (関数の宣言)、関数を引数として渡す、関数をステートメントとして使用するプログラミングが可能です。

関数型プログラミングの種類

広告 このカテゴリーの人気コース プログラミング言語 - 専門分野 | 54 コース シリーズ | 4 つの模擬テスト

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

  • ストリーム関数プログラミング
  • ラムダ式関数プログラミング
  • メソッドリファレンス関数プログラミング

Java では関数型プログラミングはどのように機能しますか?

関数型プログラミングの概念に入る前に、関数型プログラミングと構造化プログラミングの違いを見てみましょう。構造化プログラミングは論理構造またはプロセスに重点を置きますが、関数型プログラミングは主にデータに重点​​を置きます。構造化プログラミングはトップダウンのアプローチに従いますが、関数型プログラミングは下から上へのアプローチに従います。

関数型プログラミングはオブジェクトと呼ばれる小さな実行時エンティティに分割されますが、構造化プログラミングは小さなユニットまたは関数に分割されます。構造化プログラミングは安全性が低いですが、関数型プログラミングは安全性が高くなります。構造化プログラミングは複雑な問題を処理できませんが、関数型プログラミングはあらゆるレベルの複雑な問題を処理できます。

Java での関数型プログラミングの例

言及されている例を以下に示します:

例 #1: ストリーム関数型プログラミング

構文:

objectName.stream();
ログイン後にコピー

コード:

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
}
}
ログイン後にコピー

出力:

Java での関数型プログラミング

説明:

  • Java クラスでは、セッターとゲッターを生成しています。
  • 犬の名前を印刷するためのメインコードを Java クラスに記述します。
  • コード自体のコメントで各行の目的について言及します。
  • 構造化プログラミングで同じコードを記述する場合、filter()、collector()、findAny()、map() などのメソッドごとにさらに多くの行を記述する必要があります。そのため、ほとんどの関数型プログラミングの開発が優先されます。構造化プログラミング

例 #2: ラムダ式

  • ラムダ式は、式を使用してメソッド インターフェイスを表すために使用されます。
  • コレクションからのデータの反復、フィルタリング、抽出に役立ちます。
  • ラムダ式インターフェイスの実装は関数型インターフェイスです。
  • 多くのコードが削減されます。
  • ラムダ式は関数として扱われるため、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.単一の引数を持つラムダ式

構文:

(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 クラス内にラムダ式を記述しました。
  • ラムダ式内で、正方形の面積に対するロジックを記述します。
  • 最後の行では、インターフェイス メソッド getArea() を呼び出して 100 の平方の面積が出力されます。
b.  引数のないラムダ式

構文:

() ->
{
//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 クラス内に引数なしのラムダ式を記述しました。
  • ラムダ式内で、返される文字列のロジックを記述します。
  • 出力された最後の行の文字列は Hi, Amardeep! です。インターフェースメソッド getMyName().
  • を呼び出すことによって

例 #3: メソッドのリファレンス

  • メソッド参照は、関数インターフェイスのメソッドを参照するために使用されます。
  • これはラムダ式のもう 1 つの簡単な形式です。
  • メソッドを指すために毎回ラムダ式を使用する場合、メソッド参照の代わりにメソッド参照を使用できます。

構文:

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 での関数型プログラミング

Penjelasan:

  • Di atas mencipta antara muka Rectangle dan di dalam kelas StaticMethodReference menulis kod rujukan kaedah statik.
  • Dalam kaedah showRectangleArea(), logik bertulis untuk luas segi empat tepat.
  • Barisan seterusnya melepasi rujukan kaedah statik kepada rujukan antara muka RectangleArea.
  • Seterusnya, garisan mencetak kawasan segi empat tepat dengan memanggil kaedah getArea(10,20).
  • Memberi output 200.

Kesimpulan

Pengaturcaraan fungsional dicapai dengan strim, ungkapan lambda dan rujukan kaedah. Ia mengurangkan baris kod dan meningkatkan prestasi.

以上がJava での関数型プログラミングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート