Java函数式接口(interface)自动将第一个参数分配为类?

标签 java lambda functional-programming

函数式接口(interface)定义了方法MyFunc,它有2个参数,但是当这个方法在HighTemp类中实现时,由于某种原因它只有1个参数,并且被调用使用f.func(vals[i], v),这个函数如何调用这个方法boolean sameTemp(HighTemp ht2),我缺少什么?

interface MyFunc<T> {
    boolean func(T v1, T v2);
}

class HighTemp {
    private int hTemp;

    HighTemp(int ht) { hTemp = ht; }

    boolean sameTemp(HighTemp ht2) {
        return hTemp == ht2.hTemp;
    }

    boolean lessThanTemp(HighTemp ht2) {
        return hTemp < ht2.hTemp;
    }
}

public class InstanceMethObjectRefDemo {
    static<T> int Counter(T[] vals, MyFunc<T> f, T v) {
        int count = 0;

        for (int i = 0; i < vals.length; i++)
            if (f.func(vals[i], v)) count++;

        return count;
    }

    public static void main(String[] args) {
        int count;

        HighTemp[] weekDayHighs = {
                                    new HighTemp(89), new HighTemp(82),
                                    new HighTemp(90), new HighTemp(89),
                                    new HighTemp(89), new HighTemp(91),
                                    new HighTemp(84), new HighTemp(83)
                                    };

        count = Counter(weekDayHighs, HighTemp::sameTemp, new HighTemp(89));
        System.out.println(count + " days had a high of 89");

        HighTemp[] weekDayHighs2 = {
                                    new HighTemp(32), new HighTemp(12),
                                    new HighTemp(24), new HighTemp(19),
                                    new HighTemp(18), new HighTemp(12),
                                    new HighTemp(-1), new HighTemp(13)
                                    };

        count = Counter(weekDayHighs2, HighTemp::sameTemp, new HighTemp(12));
        System.out.println(count + " days had a high of 12");

        count = Counter(weekDayHighs, HighTemp::lessThanTemp, new HighTemp(89));
        System.out.println(count + " days had a high less than 89");

        count = Counter(weekDayHighs2, HighTemp::lessThanTemp, new HighTemp(19));
        System.out.println(count + " days had a high of less then 19");
    }
}

最佳答案

HighTemp::sameTemp 相当于:

(HighTemp t1, HighTemp t2) -> t1.sameTemp(t2);

关于Java函数式接口(interface)自动将第一个参数分配为类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42891992/

相关文章:

java - 这种递归回溯解决方案如何解决算术表达式?

C++11 lambda捕获 `this`并按值捕获局部变量

c# - 如何删除 lambda 表达式的 Where 条件?

python - Python脚本中数组数据转换的设计模式

java - 无法在 Eclipse neon 中运行 tomcat

java - 根据设置为 jLabel 的图标指定 jTextField 中所需的文本?

java - Full GC 频繁发生

java - 如何序列化 Runnable 以在另一个 infinispan 节点上执行代码

java - 在 Java 8 中仅使用 Function<> 实现 compose

javascript - 如何一起提升和组合功能?