首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用参数预测java-8

用参数预测java-8
EN

Stack Overflow用户
提问于 2016-11-17 11:07:43
回答 1查看 6K关注 0票数 2

对于实际中的java8 ::https://github.com/java8/Java8InAction/blob/master/src/main/java/lambdasinaction/chap1/FilteringApples.java

代码语言:javascript
复制
 public static boolean isGreenApple(Apple apple), 
 public static boolean isHeavyApple(Apple apple) {

我想添加一个类似的方法

代码语言:javascript
复制
public static boolean isAppleOfColor(Apple apple, String color)

我想使用相同的模式访问它::

代码语言:javascript
复制
 List<Apple> colorApples = filterApples(inventory, FilteringApples::isAppleOfColor("red"));

但是我不能在FilteringApples::isAppleOfColor("red")中传递参数。

到目前为止,我通过以下方法实现了这一目标:

代码语言:javascript
复制
public static Predicate<Apple> colourMatches( String color) {
    return p->color.equals(p.getColor());
}

然后打电话

代码语言:javascript
复制
  List<Apple> colorApples = filterApples(inventory, (Apple a)->a.colourMatchesOnApple("red"));
    System.out.println(colorApples);

这个很管用。但我是否可以使用“引用”参数化方法(如FilteringApples::isAppleOfColor("red"). )

谢谢

编辑

谢谢大家,我刚刚在JLS 15.13:https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.13中实现了如下内容:

不可能指定要匹配的特定签名,例如数组:排序(int[])。相反,函数接口提供作为过载解析算法输入的参数类型(§15.12.2)。这应该满足绝大多数用例;当出现对更精确控制的罕见需求时,可以使用lambda表达式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-17 11:12:15

方法引用无法捕获其他变量。

你能做的就是

代码语言:javascript
复制
List<Apple> colorApples = filterApples(inventory, a -> isAppleOfColor(a, "red"));

你会注意到它更短。

注意:我将避免使用static方法,尤其是当第一个参数是您正在编写的类型时。加起来好得多

代码语言:javascript
复制
// added to Apple
public boolean isColor(String color)

你可以打电话给

代码语言:javascript
复制
List<Apple> colorApples = filterApples(inventory, a -> a.isColor("red"));

它可能与

代码语言:javascript
复制
List<Apple> colorApples = inventory.stream()
                                   .filter(a -> a.isColor("red"))
                                   .collect(toList());
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40653292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档