2017-03-02 72 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