You can try this:
HashMap<Integer, String> original = new HashMap<>();
HashMap<String, ArrayList<Integer>> inverted = new HashMap<>();
original.put(1, "A");
original.put(2, "B");
original.put(3, "C");
original.put(4, "A");
for (Integer key: original.keySet()) {
    String newKey = original.get(key);
    inverted.computeIfAbsent(newKey, k -> new ArrayList<>());
    inverted.get(newKey).add(key);
}
System.out.println(original);
System.out.println(inverted);
So, let's say HashMap<Integer, String> original is {1=A, 2=B, 3=C, 4=A}, then you will get {A=[1, 4], B=[2], C=[3]}.
EDIT: If you want a more generic version, as @Mr.Polywhirl has suggested, you can use:
public static final <T, U> Map<U, List<T>> invertMap(Map<T, U> map) {
    HashMap<U, List<T>> invertedMap = new HashMap<>();
    for (T key : map.keySet()) {
        U newKey = map.get(key);
        invertedMap.computeIfAbsent(newKey, k -> new ArrayList<>());
        invertedMap.get(newKey).add(key);
    }
    return invertedMap;
}