パラメータとして機能インタフェースを通過

ウジ:

私は、機能的なインターフェースを備えたかなり新しいですし、どのようにパラメータとして渡すときに、これを行うには考えています。私はあなたがそれで私を助けることができる願っています。NumberValidationと呼ばれるこのクラスを持っている私はそう:

public class NumberValidation {

    public static Predicate<CommonNumber> isExisting(Function<CommonNumber, CommonNumber> retrieve){
        return (p ->{
            return Optional.ofNullable(retrieve.apply(p)).isPresent();
        });
    }

    public static Predicate<CommonNumber> isNotExisting(Function<CommonNumber, CommonNumber> retrieve){
        return (p ->{
            return !Optional.ofNullable(retrieve.apply(p)).isPresent();
        });
    }
}

あなたが見ることができるように私は、すなわち二つの機能を持っているisExistingし、isNotExistingパラメータでFunction<CommomNumber, CommonNumber>私はこのように、これらの機能のいずれかを使用したいと言います。

public CommonNumber apply(CommonNumber t) {
    return Optional.of(t).filter(p -> {
        return NumberValidation.isExisting(//parameter here);
    });
}

私はそのパラメータを渡すつもりですか見当がつかない。私が試したreturn NumberValidation.isExisting(t)とだけでなく、return NumberValidation.isExisting(p)しかし、私は必要なパラメータであるため、エラーを取得しておきますFunction<CommonNumber,CommonNumber>

スティーブ:

私はあなたがここで何をしようとしてわかりません。私は多分、あなたの質問に答える最初のもの、あなたのコードで3つの問題が、以下を参照してください。

1)あなたは合格する必要がありますFunction<CommonNumber, CommonNumber>にをnumberValidating.isExisting()つまり、取る関数であるCommonNumberと返しますCommonNumberそれはから来ているはずのところ私は知りません。これは、あなたが約求めている問題のようですが、あなたはそれらのいずれかを持っていた、またはあなたがラムダと1を構築した場合、あなたが持っているところという渡し何の問題もないはずです//parameter here

2)あなたは返すラムダ渡しているPredicateあなたへfilter()この方法が、filter()取りにPredicateだから私は、あなたが余分なラムダを望んでいないと思います。私はあなたが直接呼び出した結果を渡したいと思いますNumberValidation.isExisting()

3)あなたの呼び出しにはfilter()戻りますOptional<CommonNumber>が、あなたはようことを返すようにしようとしていますCommonNumberあなたが取得する必要がありますので、CommonNumber外をOptionalして、それを返します。

あなたのコードにこれら三つの考え方を適用し、ここでコンパイルされることを何かです。私はあなたがおそらくより面白い機能を渡すことにしたい把握しますp -> pあなたがチェックしたい場合にも、私は知らないOptionalし、それが含まれていない場合は、何かの異なるバックパスCommonNumberとにかく、これはあなたが始める必要があります。

public CommonNumber apply(CommonNumber t) {
    return Optional.of(t).filter(NumberValidation.isExisting(p -> p)).get();
}

あなたのNumberValidationクラスがあるとしてOKらしいです。

場合はp -> p、完全にあなたが渡すだろうか答えていないFunction<CommonNumber, CommonNumber>、あなたの方法に、ここではより明示的な関数を作成することをもう一つの例です:

static CommonNumber someCommonNumberProcessor(CommonNumber cn) {
    return cn;
}

public CommonNumber apply(CommonNumber t) {
    return Optional.of(t).filter(NumberValidation.isExisting(Test2::someCommonNumberProcessor)).get();
}

これは、すべての名前のクラスの中にありますTest2

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=235995&siteId=1