如何在Java中使用Lambda表达式

时间:2013-01-12 21:52:24

标签: java

如何在JDK7中使用Java(Lambda Expression)这样的东西?

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子句。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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中添加一个更简洁的语法,随机更改语义,以及添加库。

答案 2 :(得分:0)

将在Java 8中添加lambda函数。阅读更多:http://en.wikipedia.org/wiki/Java_version_history#Java_SE_8

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

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

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

此链接将告诉您如何在JDK7及以下版本之前完成它(传递代码)以及它现在如何完成JDK8