С классами Google Guava / Collection и мягкими или слабыми клавишами или значениями ваши ключи должны быть надежными ссылками, чтобы карта использовала equals (), а не == для поиска кэшированных значений. Если у вас есть слабые / программные клавиши, то поиск выполняется с использованием идентификатора, поэтому вы всегда будете получать промах кэша. Поэтому, если вы хотите, чтобы сборщик мусора собирал элементы из вашего кэша, вам нужно сделать значения мягкими или слабыми.
Я понимаю, что в будущем Google добавит функцию эквивалентности, чтобы вы могли указать, хотите ли вы использовать equals () или ==, и не делать этот выбор, выбирая сильные, слабые или мягкие ссылки.
Так как ваш объект Tuple реализует equals () и hashCode (), тогда вы просто делаете
new MapMaker()
.softValues()
.makeComputingMap(new Function<Tuple,String>() {
public String apply(Tuple t) {
// generate the correlation-id
}
});