0

私は LambdaJ を学んでおり、タスクを達成する必要があるたびに、ラムダジを使用するために既存の例を確認して変更する必要があります。

私はそれを使い始めましたが、ここであなたに尋ねたいことが足りないと思います.

havingメソッドの使用については明確ではありません。それがどのように機能し、どのように使用できるかわかりません。

ドキュメントをデバッグ、逆コンパイル、および読み取りましたが、「考え方」ラムダが見つかりません。

havingjavadoc 言います:

static HasArgumentWithValue having(引数、org.hamcrest.Matcher マッチャー)

指定された引数の値が、渡されたマッチャーによって定義された条件を満たす場合に true に評価される hamcrest マッチャーを作成します。

私はhavingこのような例で使用しました:

List<User> result = filter(having(on(User.class).getAge(), greaterThan(20)), list);

havingは、harmcrest マッチャーを引数に適用し、それをリスト全体で繰り返すことを理解しています。

しかし、私の質問は、持つことはどのように機能するのでしょうか? ラムダジで機能的に考えるにはどうすればよいですか?

4

1 に答える 1

0

コードの説明は次のようになります。

the function filter take each user from list and 
 apply it over function having 
   that retrieved the age and compare with value of 20. 

これは次のように書くことができます

private List<User> filter(List<User> users) {
    final List<User> filtered = new ArrayList<>();
    for(User user : users) {
       if(having(user.getAge(),greaterThan(20)) {
          filtered.add(user);
       }
    }
    return filtered;
}


private boolean having(Integer age,  org.hamcrest.Matcher<Integer> matcher) {

   return matcher.matcher(age);
}

つまり、値とマッチャーの 2 つの引数を取り、値に対してマッチャーを評価する関数です。そして、値の引数は、結果にブール値を期待する関数フィルターによって渡されます。

于 2014-05-29T23:33:54.337 に答える