import java.util.*; import java.util.stream.*; public class ListCounter { public static void main(String[] args) { List list = Arrays.asList("java", "java", "go", "cpp", "go", "python", "java", "python", "go", "python", "go"); Map result = countSortElements(list); result.forEach((key, value) -> System.out.println(key + ": " + value)); } public static Map countSortElements(List list) { return list.stream() .collect(Collectors.groupingBy(e -> e, Collectors.counting())) .entrySet() .stream() .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())) .collect(Collectors.toMap( Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new )); } }