0

如何在带有 JDK7 的 Java 中使用这样的东西(Lambda 表达式)?

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

Lambda 表达式是 Java 8 的一部分(请参阅JSR 335),因此您对 JDK7 不走运。

于 2013-01-12T21:53:30.460 回答
1

I'm not a C(sharp) person, but isn't that just the equivalent of:

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

Follow up to your edit: I don't know the .NET library, but a filtering in Java would look something like:

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;
}

In the current verbose syntax that would called like:

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

A more concise syntax with random changes to semantics should be added in Java SE 8, along with library additions.

于 2013-01-12T22:01:09.513 回答
0

Lambdas(也称为闭包)是整个 Java 8 版本中最大和最受期待的语言变化。lambda 表达式是一个匿名函数。简单地说,它是一个没有声明的方法,即访问修饰符、返回值声明和名称。

阅读更多http://www.onsandroid.com/2014/11/java-lambda-expression.html

于 2014-11-10T10:57:06.410 回答
0

lamabda-functions 将在 Java 8 中添加。阅读更多: http ://en.wikipedia.org/wiki/Java_version_history#Java_SE_8

于 2013-01-12T21:59:55.737 回答
0

您的问题是:如何在 Java 中使用 Lambda 表达式?(使用 JDK 7)

我知道的简单答案是:匿名的接口和实现。类。

Lambda 表达式是一种将代码块传递给方法的方法。我们在以前的JDK7及以下版本中也这样做过,
要理解这一点,您需要了解接口和实现匿名类。

现在,为了详细了解示例,我强烈推荐本教程,
Basic Lambda Expressions

此链接将让您了解它(传递代码)在 JDK7 及以下版本之前是如何完成的,以及现在 JDK8 是如何完成的

于 2015-07-16T06:49:16.223 回答