/* package whatever; // don't place package name! */
 
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.function.Function;
 
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
    public static void main
(String[] args
) {  
        HashMap<SomeClass, Integer> myMap = new HashMap<SomeClass, Integer>() {{
            put(new SomeClass(2, 26), 10);
            put(new SomeClass(8, 25), 5);
            put(new SomeClass(5, 24), 5);
        }};
 
        float resultOne = average(myMap, SomeClass::getMyInt);
        float resultTwo = average(myMap, SomeClass::getAge);
        System.
out.
println(resultOne
);         System.
out.
println(resultTwo
);     }
 
    public static float average(HashMap<SomeClass, Integer> myMap, Function<SomeClass, Integer> getterFunc) {
 
        float totalAmount = 0;
        float buffer = 0;
        for (SomeClass aClass : myMap.keySet()) {
            totalAmount += myMap.get(aClass);
            buffer += getterFunc.apply(aClass) * myMap.get(aClass);
        }
        return buffer / (totalAmount * myMap.size());
    }
 
    public static class SomeClass {
 
        private final int myInt;
 
        private final int age;
 
        public SomeClass(int myInt, int age) {
 
            this.myInt = myInt;
            this.age = age;
        }
 
        public int getAge() {
 
            return age;
        }
 
        public int getMyInt() {
 
            return myInt;
        }
    }
}
				LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CmltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uRnVuY3Rpb247CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpIHsKCiAgICAgICAgSGFzaE1hcDxTb21lQ2xhc3MsIEludGVnZXI+IG15TWFwID0gbmV3IEhhc2hNYXA8U29tZUNsYXNzLCBJbnRlZ2VyPigpIHt7CiAgICAgICAgICAgIHB1dChuZXcgU29tZUNsYXNzKDIsIDI2KSwgMTApOwogICAgICAgICAgICBwdXQobmV3IFNvbWVDbGFzcyg4LCAyNSksIDUpOwogICAgICAgICAgICBwdXQobmV3IFNvbWVDbGFzcyg1LCAyNCksIDUpOwogICAgICAgIH19OwoKICAgICAgICBmbG9hdCByZXN1bHRPbmUgPSBhdmVyYWdlKG15TWFwLCBTb21lQ2xhc3M6OmdldE15SW50KTsKICAgICAgICBmbG9hdCByZXN1bHRUd28gPSBhdmVyYWdlKG15TWFwLCBTb21lQ2xhc3M6OmdldEFnZSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdE9uZSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKHJlc3VsdFR3byk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmbG9hdCBhdmVyYWdlKEhhc2hNYXA8U29tZUNsYXNzLCBJbnRlZ2VyPiBteU1hcCwgRnVuY3Rpb248U29tZUNsYXNzLCBJbnRlZ2VyPiBnZXR0ZXJGdW5jKSB7CgogICAgICAgIGZsb2F0IHRvdGFsQW1vdW50ID0gMDsKICAgICAgICBmbG9hdCBidWZmZXIgPSAwOwogICAgICAgIGZvciAoU29tZUNsYXNzIGFDbGFzcyA6IG15TWFwLmtleVNldCgpKSB7CiAgICAgICAgICAgIHRvdGFsQW1vdW50ICs9IG15TWFwLmdldChhQ2xhc3MpOwogICAgICAgICAgICBidWZmZXIgKz0gZ2V0dGVyRnVuYy5hcHBseShhQ2xhc3MpICogbXlNYXAuZ2V0KGFDbGFzcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBidWZmZXIgLyAodG90YWxBbW91bnQgKiBteU1hcC5zaXplKCkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgU29tZUNsYXNzIHsKCiAgICAgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbXlJbnQ7CgogICAgICAgIHByaXZhdGUgZmluYWwgaW50IGFnZTsKCiAgICAgICAgcHVibGljIFNvbWVDbGFzcyhpbnQgbXlJbnQsIGludCBhZ2UpIHsKCiAgICAgICAgICAgIHRoaXMubXlJbnQgPSBteUludDsKICAgICAgICAgICAgdGhpcy5hZ2UgPSBhZ2U7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgaW50IGdldEFnZSgpIHsKCiAgICAgICAgICAgIHJldHVybiBhZ2U7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgaW50IGdldE15SW50KCkgewoKICAgICAgICAgICAgcmV0dXJuIG15SW50OwogICAgICAgIH0KICAgIH0KfQ==