【问题标题】:Java 8: Method as parameter with Lambda referenceJava 8:使用 Lambda 参考作为参数的方法
【发布时间】:2017-03-02 15:44:52
【问题描述】:

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

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

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

我希望它像

一样简单

retrieveContent(strFilter, this::setField1) 但不知何故我没有正确理解语法 - 特别是对于方法。我可以将其作为字符串并调用if via method,但它更容易出现拼写错误......还有其他想法吗?

【问题讨论】:

  • 你怎么知道 setField1() 方法可用?

标签: java lambda


【解决方案1】:

听起来您正在寻找Consumer,只要您用&lt;?&gt; 以外的值填写泛型,它就可以工作。

例如:

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);

【讨论】:

  • 当然,除了&lt;Object&gt;,可以引用宿主类的类型参数,或者如果方法是泛型的,则可以引用方法的类型参数。
  • Thx,这基本上按预期的方式工作 :-) 除了 JPA 不喜欢 Lambda 的东西(至少对于 EclipseLink 2.5x)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-20
  • 1970-01-01
相关资源
最近更新 更多