/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
// Test getMostPopularItem method
List
<Integer
> list
= Arrays.
asList(1,
2,
3,
4,
5,
6,
6,
6,
1,
1,
1); int mostPopularItem = getMostPopularItem(list);
System.
out.
println("Most popular item: " + mostPopularItem
); }
public static <T> T getMostPopularItem(Iterable<T> collection) {
// Create new map that will hold pairs:
// (item) -> (number of it's occurence in collection)
Map<T, Integer> map = new HashMap<>();
T mostPopularItem = null;
int maxNumOfOccurence = 0;
for (T item : collection) {
// Add item to map
Integer prevNumOfOccur
= map.
put(item, numOfOccur
); // Correct number of occurence if it's not first time it's added
if (prevNumOfOccur != null) {
numOfOccur = map.put(item, prevNumOfOccur + numOfOccur);
}
// Correct mostPopularItem
if (numOfOccur > maxNumOfOccurence) {
mostPopularItem = item;
}
}
return mostPopularItem;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCS8vIFRlc3QgZ2V0TW9zdFBvcHVsYXJJdGVtIG1ldGhvZAoJCUxpc3Q8SW50ZWdlcj4gbGlzdCA9IEFycmF5cy5hc0xpc3QoMSwgMiwgMywgNCwgNSwgNiwgNiwgNiwgMSwgMSwgMSk7CiAgICAgICAgaW50IG1vc3RQb3B1bGFySXRlbSA9IGdldE1vc3RQb3B1bGFySXRlbShsaXN0KTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIk1vc3QgcG9wdWxhciBpdGVtOiAiICsgbW9zdFBvcHVsYXJJdGVtKTsKCX0KCQoJcHVibGljIHN0YXRpYyA8VD4gVCBnZXRNb3N0UG9wdWxhckl0ZW0oSXRlcmFibGU8VD4gY29sbGVjdGlvbikgewogICAgICAgIC8vIENyZWF0ZSBuZXcgbWFwIHRoYXQgd2lsbCBob2xkIHBhaXJzOgogICAgICAgIC8vIChpdGVtKSAtPiAobnVtYmVyIG9mIGl0J3Mgb2NjdXJlbmNlIGluIGNvbGxlY3Rpb24pCiAgICAgICAgTWFwPFQsIEludGVnZXI+IG1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKICAgICAgICAKICAgICAgICBUIG1vc3RQb3B1bGFySXRlbSA9IG51bGw7CiAgICAgICAgaW50IG1heE51bU9mT2NjdXJlbmNlID0gMDsKICAgICAgICBmb3IgKFQgaXRlbSA6IGNvbGxlY3Rpb24pIHsKICAgICAgICAgICAgLy8gQWRkIGl0ZW0gdG8gbWFwCiAgICAgICAgICAgIEludGVnZXIgbnVtT2ZPY2N1ciA9IDE7CiAgICAgICAgICAgIEludGVnZXIgcHJldk51bU9mT2NjdXIgPSBtYXAucHV0KGl0ZW0sIG51bU9mT2NjdXIpOwogICAgICAgICAgICAvLyBDb3JyZWN0IG51bWJlciBvZiBvY2N1cmVuY2UgaWYgaXQncyBub3QgZmlyc3QgdGltZSBpdCdzIGFkZGVkCiAgICAgICAgICAgIGlmIChwcmV2TnVtT2ZPY2N1ciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICBudW1PZk9jY3VyID0gbWFwLnB1dChpdGVtLCBwcmV2TnVtT2ZPY2N1ciArIG51bU9mT2NjdXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIENvcnJlY3QgbW9zdFBvcHVsYXJJdGVtCiAgICAgICAgICAgIGlmIChudW1PZk9jY3VyID4gbWF4TnVtT2ZPY2N1cmVuY2UpIHsKICAgICAgICAgICAgICAgIG1vc3RQb3B1bGFySXRlbSA9IGl0ZW07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgcmV0dXJuIG1vc3RQb3B1bGFySXRlbTsKICAgIH0KfQ==