簡體   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