Java8での述語の使い方の紹介(コード例)
この記事では、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; }
のようなメソッドを作成する可能性がありました。しかし、その後、誰かが 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; }
ソフトウェア エンジニアリングにおけるコピー アンド ペーストの危険性は誰もが知っています。一方を更新および修正しても、もう一方は忘れてしまいます。 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; }
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() < 80 || "brown".equals(a.getColor())); System.out.println(weirdApples); } public static List<FilteringApples1.Apple> 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 + '}'; } } }
組み込みの Java8 フィルター関数
static <T> Collection<T> filter(Collection<T> c, Predicate<T> p);
filterApples(inventory, (Apple a) -> a.getWeight() > 150 );
filter(inventory, (Apple a) -> a.getWeight() > 150 );
以上がJava8での述語の使い方の紹介(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

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

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

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
