It for sure depends on a person. Everybody have different opinion if it should be from new or from old value, and the best solution here depends on the use-case (if we have one use-case - one sub-class). 

However, if it is going to be universal, and reusable there is simple rule called KISS which we should stick too. According to this one function should affect just one thing. 

Now imagine that you change the code in future to change the value stored but you want to leave the key the same. Actually it is not possible! because the valuegetter affects keygetter. In the original design one needs to modify both functions. Graham's subtle change eliminates this problem.