Java 8:方法作为Lambda引用的参数

时间:2017-03-02 15:44:53

标签: java lambda

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

我想在我的代码中实现reoccuring模式:

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

我希望将其简单化为

retrieveContent(strFilter, this::setField1)但不知怎的,我不能正确地获得语法 - 特别是对于该方法。我可以把它作为一个字符串来调用if via method,但是它容易出现错别字...还有其他想法吗?

1 个答案:

答案 0 :(得分: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);