この記事では、Java8 での述語の使用法 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。
パスコード
まず、getColor メソッドを持つ Apple クラスと、Apple のリストを保持する変数インベントリがあると仮定します。 。すべての青リンゴを選択してリストを返したい場合があります。通常、私たちはこの概念を表現するためにフィルターという言葉を使います。 Java 8 より前では、filterGreenApples:
public static List<apple> filterGreenApples(List<apple> inventory){ List<apple> result = new ArrayList(); for (Apple apple: inventory){ if ("green".equals(apple.getColor())) { result.add(apple); } } return result; }</apple></apple></apple>
のようなメソッドを作成する可能性がありました。しかし、その後、誰かが 150 グラムを超えるような重いリンゴを選択する可能性があるため、重い心で次のメソッドを作成しました
メソッドコピー アンド ペーストを使用する場合でも:
public static List<apple> filterHeavyApples(List<apple> inventory){ List<apple> result = new ArrayList(); for (Apple apple: inventory){ if (apple.getWeight() > 150) { result.add(apple); } } return result; }</apple></apple></apple>
ソフトウェア エンジニアリングにおけるコピー アンド ペーストの危険性は誰もが知っています。一方を更新および修正しても、もう一方は忘れてしまいます。 2 つのメソッドの違いは 1 行だけです。それは、if で強調表示されている条件行です。強調表示された 2 つの方法の違いが、受け入れられた
の重みの範囲のみである場合は、
(150, 1000) を指定すると重いリンゴ (150 グラム以上) が選択され、(0, 80) を指定すると軽いリンゴ (80 グラム未満) が選択されます。
ただし、前に述べたように、Java 8 では条件付きコードをパラメーターとして渡すため、フィルター メソッド
でのコードの重複を避けることができます。これで、次のように記述できます:
public static boolean isGreenApple(Apple apple) { return "green".equals(apple.getColor()); } public static boolean isHeavyApple(Apple apple) { return apple.getWeight() > 150; } static List<apple> filterApples(List<apple> inventory, Predicate<apple> p) { List<apple> result = new ArrayList(); for (Apple apple: inventory){ if (p.test(apple)) { result.add(apple); } } return result; }</apple></apple></apple></apple>これを使用するには、次のように記述できます:
filterApples(inventory, Apple::isGreenApple);
または
filterApples(inventory, Apple::isHeavyApple) ;
述語とは何ですか?
boolean を返します) を filterApples に渡します。このメソッドは、Predicateパラメータを受け入れることを想定しています。 predicate
という単語は、パラメータ値を受け入れて true または false を返す関数のようなものを表すために数学でよく使用されます。
後で説明するように、Java 8 では Functionを書くこともできます。学校で関数を学んだことがあるが
predicates についてはよく知らない読者は、Predicateを使用することもできます。これはより標準的な方法であり、ブール値をブール値にカプセル化することを回避します。
Lambdaにメソッドを渡す
メソッドを値として渡すのは当然便利ですが、isHeavyAppleやisGreenAppleのような1回か2回しか使えない短いメソッドだと定義を山ほど書くのが大変です少し面倒です。ただし、Java 8 ではこの問題も解決されています。新しい
表記法 (匿名関数または Lambda) が導入されており、filterApples(inventory, (Apple a) -> "green".equals (a. getColor()) );
or
filterApples(inventory, (Apple a) -> a.getWeight() > 150 );
or Even
filterApples(inventory, (Apple a) -> a.getWeight() "brown".equals(a.getColor()) );
完全なコードは次のとおりです:
public class FilteringApples1 { public static void main(String[] args) { List<filteringapples1.apple> inventory = Arrays.asList(new FilteringApples1.Apple(80, "green"), new FilteringApples1.Apple(155, "green"), new FilteringApples1.Apple(120, "red")); List<filteringapples1.apple> greenApples2 = filterApples(inventory, (FilteringApples1.Apple a) -> "green".equals(a.getColor())); System.out.println(greenApples2); // [Apple{color='green', weight=155}] List<filteringapples1.apple> heavyApples2 = filterApples(inventory, (FilteringApples1.Apple a) -> a.getWeight() > 150); System.out.println(heavyApples2); // [] List<filteringapples1.apple> weirdApples = filterApples(inventory, (FilteringApples1.Apple a) -> a.getWeight() filterApples(List<filteringapples1.apple> inventory, Predicate<filteringapples1.apple> p) { List<filteringapples1.apple> result = new ArrayList(); for (FilteringApples1.Apple apple : inventory) { if (p.test(apple)) { result.add(apple); } } return result; } public static class Apple { private int weight = 0; private String color = ""; public Apple(int weight, String color) { this.weight = weight; this.color = color; } public Integer getWeight() { return weight; } public void setWeight(Integer weight) { this.weight = weight; } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public String toString() { return "Apple{" + "color='" + color + '\'' + ", weight=" + weight + '}'; } } }</filteringapples1.apple></filteringapples1.apple></filteringapples1.apple></filteringapples1.apple></filteringapples1.apple></filteringapples1.apple></filteringapples1.apple>
組み込みの Java8 フィルター関数
static <t> Collection<t> filter(Collection<t> c, Predicate<t> p);</t></t></t></t>この方法では、filterApples を記述する必要さえありません。たとえば、前の呼び出し
filterApples(inventory, (Apple a) -> a.getWeight() > 150 );はライブラリ メソッド filter:
filter(inventory, (Apple a) -> a.getWeight() > 150 );## を直接呼び出すことができるためです。 #
以上がJava8での述語の使い方の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
