Java8:方法作为参数,带有Lambda引用

Java8:方法作为参数,带有Lambda引用,java,lambda,Java,Lambda,我已经扫描了多个链接,但没有找到一个简单的Java 8 Lambda表达式解决方案。我发现的最有用的提示是关于,但并没有真正满足我的兴趣 我想在我的代码中实现一个重复出现的模式: List<?> content=retrieveContent(strFilter); if (!content.isEmpty()) setField1(content.get(0)); List content=retrieveContent(strFilter); 如果(!content.i

我已经扫描了多个链接,但没有找到一个简单的Java 8 Lambda表达式解决方案。我发现的最有用的提示是关于,但并没有真正满足我的兴趣

我想在我的代码中实现一个重复出现的模式:

List<?> content=retrieveContent(strFilter);
if (!content.isEmpty())
    setField1(content.get(0));
List content=retrieveContent(strFilter);
如果(!content.isEmpty())
setField1(content.get(0));
我希望它能简单到


retrieveContent(strFilter,this::setField1)
但不知何故,我没有正确地获取语法,尤其是对于该方法。我可以把它当作字符串和调用,但它很容易出错。。。还有其他想法吗?

听起来你在找一个,只要你在泛型中填入一个非
的值,这个方法就行了

例如:

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;
}
私有列表检索内容(字符串strFilter,Consumer firstItemConsumer){
列表=新的ArrayList();
//建立回报。。。
如果(!list.isEmpty()){
firstItemConsumer.accept(list.get(0));
}
退货清单;
}
然后可以使用以下命令调用:

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

您如何知道setField1()方法可用?当然,除了JPA不喜欢Lambda的东西(至少对于EclipseLink 2.5x而言)之外,您可以引用宿主类的类型参数,或者方法的类型参数(如果该方法是泛型的话)。Thx,这基本上与预期的方式相同:-)