この方法では一般的な述語と機能を使用します

アロン:

私はここで、ジェネリック医薬品へのかなり新しいだといくつかの支援をしたいと思います。

私は、ジェネリックとジェネリックメソッドを作成しようとしているPredicate、ジェネリックjava.util Function、ジェネリックList引数として。この方法は、このようなものです:

public static <T> T getValue(Predicate<? super Object> condition, Function<? super Object, ? extends Object> mapper, T elseResult, List<T> table) {
        T result = null;
        if (table != null)
            result = table.stream()
                    .filter(condition)
                    .map(mapper).findAny().orElse(elseResult); // Syntax error here.
        else
            result = elseResult;

        return (T) result;
    }

私は、上のエラーを取得していますorElse(elseResult)方法。これは誤りであります-

The method orElse(capture#1-of ? extends Object) in the type Optional<capture#1-of ? extends Object> is not applicable for the arguments (T).

私は、このエラーが何であるかにと正確にはわかりません。だから、誰かが、私はここで間違ってやっているものを私に言うことができますか?ありがとうございました。

彼らは次のとおりでした:

あなたはmapperあなたのように何かを返すことができるorElse方法は必ずしも戻りませんT

あなたが変更した場合mapperにはFunction<T,T> mapper、あなたのコードはコンパイルを通過します。

あなたのマッパーが異なる型を返すことができるようにしたい場合は、2番目の型引数を追加します。

public static <T,S> S getValue(Predicate<? super Object> condition, Function<T,S> mapper, S elseResult, List<T> table) {
    S result = null;
    if (table != null)
        result = table.stream()
                .filter(condition)
                .map(mapper).findAny().orElse(elseResult);
    else
        result = elseResult;

    return result;
}

おすすめ

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