Как uniq идентифицировать функцию в Java 8 - PullRequest
0 голосов
/ 21 февраля 2019

Я спрашиваю, могу ли я взять функцию в качестве ключа для карты.

Обычно ключевой объект для карты должен иметь методы hashcode и equal.Однако Java Function является объектом метода, и у него нет этих двух методов.

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

так возможно ли это?Если возможно, какой-нибудь образец?Я не получил этот случай от Google.

Если нет, есть ли другой способ определить трудоемкий Function результат выполнения?Спасибо

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Решение состоит в том, чтобы использовать полноценные классы с реализованными методами hashCode и equals:

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
}
0 голосов
/ 21 февраля 2019

Оба - quote1 и quote2 - запечены некоторым Java-классом, созданным компилятором.

Вот еще одно обсуждение, как получить доступ к байт-коду

Какполучить байтовый код как байтовый массив из класса

Хотя это не рекомендуется.

Какова ваша цель за этот вопрос?

...