2014-11-13 4 views
0

Я использую Pattern.compile("XXX").asPredicate() для создания множества предикатов для обработки некоторых данных. Глядя на его реализацию, это только егоЧто такое HashCode для встроенных предикатов?

public Predicate<String> asPredicate() { 
    return s -> matcher(s).find(); 
} 

Что такое хэш-код для встроенного сгенерированного предиката? Согласно https://docs.oracle.com/javase/8/docs/api/java/util/function/Predicate.html, он не указывает хэш-код ... Сравнение значений в моем приложении кажется, что это просто новый хэш-код каждый раз, даже для одного и того же выражения. Поэтому мне просто интересно, как он получает свой хэш-код в целом.

+0

Почему вы ищете hashcode? Когда вы сравниваете «String» (упомянутый в вашем примере), вы должны использовать метод isEqual для сравнения строк? – veysiertekin

+0

На данный момент только для знания. Первоначально мне было интересно, как я буду кэшировать результаты фильтра, если бы я обрабатывал большие списки со сложными предикатами. Я подумал, может быть, HashMap с набором статических предикатов где-то ... В любом случае, это не происходит по той дороге. –

+2

Он просто использует реализацию Object.hashCode(). –

ответ

1

Lambdas, вероятно, использует Object по умолчанию hashCode() реализация, которая возвращает что-то на основе идентификатора объекта.

+0

Знаете ли вы, можно ли переопределить реализацию? Я хотел бы знать, являются ли два лямбда одинаковыми. (Иметь тот же текст) –

+0

Используйте метод oldschool для создания анонимного класса. – Bombe

Смежные вопросы