При работе с объектами пользователя, поступающими из базы данных, обычно есть идентификатор и имя пользователя, и обычным является поиск пользователя по идентификатору или по имени пользователя.Ключи Guava с использованием независимых ключей
Если я сейчас хочу найти пользователей и люблю использовать кешивы Guava, я должен создать два кэша. Один - кеширование по id, один - кеширование по имени пользователя.
Но оба указывают на один и тот же объект.
Можно ли использовать только один загрузочный кеш?
Я думал об использовании самого объекта User как ключа LoadingCache<User, User>
и реализовал равные и хэш-коды в объекте User.
В методе равных нетрудно сказать, что два объекта User равны, если либо id , либо имя пользователя равно.
Но как я могу создать хороший метод hashCode, который работает для этого сценария?
Любые идеи по этому поводу?
Мне непонятно _why_ вы хотите использовать только один кеш. Использование двух кешей кажется правильным в этом сценарии. (И заставить ваш метод равных работать так, что это определенно сломает вещи, «равно» ожидается переходным, а ваша логика - нет.) –
В предшественнике Guava Cache у меня был пример [индексируемого кеша] (https: // code.google.com/p/concurrentlinkedhashmap/wiki/IndexableCache), которые предоставили эту возможность. Его слишком редко нужно было, чтобы мы не вводили эту концепцию в Гуаву. Основная идея может быть адаптирована в вашем собственном коде, хотя (например, с помощью Guave's Striped). –