0

JDK7を使用するJavaでこのようなもの(ラムダ式)を使用するにはどうすればよいですか?

public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity, bool>> filter = null)

このメソッドにwhere句を渡してselectステートメントをフィルタリングしようとしています。C#ではLambda式を使用でき、Javaプロジェクトでこれを行うためのソリューションを探しています。

public List<TEntity> Get() {
    List<TEntity> result = emf.createEntityManager().createNamedQuery(ClassName + ".findAll").getResultList();
    return result;
}

これは私のメソッドであり、このメソッドにwhere句を渡したいと思います。

4

5 に答える 5

4

ラムダ式はJava8の一部であるため(JSR 335を参照)、JDK7では運が悪いです。

于 2013-01-12T21:53:30.460 に答える
1

私はC(シャープ)な人ではありませんが、それは次のようなものではありません。

Iterable<Entity> get();
Iterable<Entity> get(Expression<Func<Entity, Boolean>> filter);

編集のフォローアップ:.NETライブラリはわかりませんが、Javaでのフィルタリングは次のようになります。

public interface Predicate<T> {
    boolean matches(T obj);
}
...
public List<Entity> get(Predicate<Entity> filter) {
    List<Entity> filtered = new ArrayList<>();
    for (Entity obj : ...blah...) {
        if (filter.matches(obj)) {
            filtered.add(obj);
         }
    }
    return filtered;
}

現在の冗長構文では、次のように呼び出されます。

List<Entity> entities = thing.get(new Predicate<>() {
    public boolean matches(Entity obj) {
        return obj.isX() && obj.isY();
    }
});

Java SE 8では、ライブラリの追加とともに、セマンティクスがランダムに変更されたより簡潔な構文を追加する必要があります。

于 2013-01-12T22:01:09.513 に答える
0

lamabda-functionsはJava8で追加されます。続きを読む:http: //en.wikipedia.org/wiki/Java_version_history#Java_SE_8

于 2013-01-12T21:59:55.737 に答える
0

ラムダ(クロージャとも呼ばれます)は、Java8リリース全体で最大かつ最も待望されている言語変更です。ラムダ式は無名関数です。簡単に言えば、これは宣言のないメソッドです。つまり、アクセス修飾子、戻り値の宣言、および名前です。

続きを読むhttp://www.onsandroid.com/2014/11/java-lambda-expression.html

于 2014-11-10T10:57:06.410 に答える
0

あなたの質問は:JavaでLambda式を使用するにはどうすればよいですか?(JDK 7を使用)

私が知っている簡単な答えは、インターフェースと匿名の実装です。クラス。

ラムダ式は、コードのブロックをメソッドに渡す方法です。以前のバージョンのJDK7以下でもこれを行うために使用します。これ
を理解するには、インターフェースと匿名クラスの実装を理解する必要があります。

例を使って詳細を理解するために、このチュートリアル、基本的なラムダ式を強くお勧めします

このリンクは、JDK7以前で(コードを渡す)どのように行われたか、そして現在JDK8でどのように行われたかを示しています。

于 2015-07-16T06:49:16.223 に答える