繁体   English   中英

如何在Java中使用Lambda表达式

[英]How can I use Lambda Expressions in Java

如何在Java和JDK7中使用类似这样的内容(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子句。

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

我不是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中,应该随语义的随机变化添加一种更简洁的语法,并增加一些库。

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

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

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

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

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

Lambda表达式是一种将代码块传递给方法的方法。 我们以前在JDK7和更低版本中也使用过此功能,
要了解这一点,您需要了解接口和实现匿名类。

现在,为了详细了解示例,我强烈建议您使用本教程,
基本Lambda表达式

该链接将使您了解在JDK7及更低版本之前它是如何完成的(传递代码)以及现在在JDK8中如何完成(传递代码)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM