如何在Java 8中单独识别函数

问题描述 投票:0回答:2

我问我是否可以将一个函数作为地图的关键。

通常,地图的关键对象应该有hashcodeequal方法。但是,Java Function是一个方法对象,它没有这两种方法。

Function<String, String> quote1 = s -> "'" + s + "'";
Function<String, String> quote2 = s -> "'" + s + "'";
System.out.println(quote1.equals(quote2));  //false

有可能吗?如果可能,任何样品?谷歌没有得到这个案子。

如果没有,有没有其他方法来识别耗时的Function执行结果?谢谢

java function equals hashcode
2个回答
0
投票

-quote1quote2都是由编译器创建的一些Java类烘焙的。

这是另一个讨论如何访问字节码的讨论

How to get bytecode as byte array from Class

虽然,不推荐。

这个问题背后的目标是什么?


0
投票

解决方案是使用实现hashCodeequals方法的完整类:

public class StringStringFunction implements Function<String, String> {
    static String id = "'+s+'";

    @Override
    public int hashCode() {
        return id.hashCode();
    }

    @Override
    public boolean equals(Object obj) {
        return obj instanceof StringStringFunction;
    }

    @Override
    public String apply(String s) {
        return  "'" + s + "'";
    }
}

然后我们可以写:

public static void main(String[] a) {
    Function<String, String> quote1 = new StringStringFunction();
    Function<String, String> quote2 = new StringStringFunction();
    System.out.println(quote1.equals(quote2));  //true
}
© www.soinside.com 2019 - 2024. All rights reserved.