@Vivin's answer is correct, but I think it's useful to explain why Guava doesn't have any method to allow you to transform the keys of a Map
(or to transform a Set
at all).
All of Guava's methods for transforming and filtering produce lazy results... the function/predicate is only applied when needed as the object is used. They don't create copies. Because of that, though, a transformation can easily break the requirements of a Set
.
Let's say, for example, you have a Map<String, String>
that contains both "1" and "01" as keys. They are both distinct String
s, and so the Map
can legally contain both as keys. If you transform them using Long.valueOf(String)
, though, they both map to the value 1
. They are no longer distinct keys. This isn't going to break anything if you create a copy of the map and add the entries, because any duplicate keys will overwrite the previous entry for that key. A lazily transformed Map
, though, would have no way of enforcing unique keys and would therefore break the contract of a Map
.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…