/* 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==