2017-03-02 63 views
2

我掃描了多個鏈接,但未找到Java 8 Lambda表達式的簡單解決方案。我發現的最有用的提示是Java 8 Lambdas,但並沒有真正滿足我的興趣。Java 8:使用Lambda參考的方法作爲參數

我想實現我的代碼reoccuring模式:

List<?> content=retrieveContent(strFilter); 
if (!content.isEmpty()) 
    setField1(content.get(0)); 

,我想有它簡單

retrieveContent(strFilter, this::setField1)但不知何故,我沒有得到正確的語法 - 特別是對方法。我可以做一個字符串,並呼籲if via method,但比它容易出現錯別字...任何其他的想法?

+0

你怎麼知道setField1()方法是可行的? – m0skit0

回答

6

這聽起來像你正在尋找一個Consumer,只要你填寫的值不是<?>就可以工作。

例如:

private List<Object> retrieveContent(String strFilter, Consumer<Object> firstItemConsumer) { 
    List<Object> list = new ArrayList<>(); 

    // Build the return... 

    if(!list.isEmpty()) { 
     firstItemConsumer.accept(list.get(0)); 
    } 

    return list; 
} 

然後可以用稱爲:

List<Object> content = retrieveContent(strFilter, this::setField1); 
+1

當然,如果該方法是通用的,那麼可以引用主機類的類型參數或方法的類型參數,而不是''。 –

+0

Thx,這基本上按照預期的方式工作:-)除了JPA不喜歡Lambda-stuff(至少對於EclipseLink 2.5x) – LeO

+0

它對EclipseLink 2.6.4非常有用:-) – LeO