Agrupar por e contar na lista

Eu tenho uma lista que é preenchida com ints, como este:

[0] 1
[1] 4
[2] 4
[3] 8
[4] 9
[5] 1
[6] 1

Então, basicamente números aleatórios lá, mas o mesmo número pode ocorrer várias vezes nessa lista.

O que eu quero é agrupá-los por número, mas eu também posso dizer quantas vezes esse número estava na lista. Então eu tenho algo parecido com:

[0] 
  [number] 1
  [total] 3  // Occured 3 times in the list
[1]
  [number] 4
  [total] 2
[2]
  [number] 8
  [total] 1
[3]
  [number] 9
  [total] 1

Existe uma maneira rápida / fácil de realizar isso? Ou eu tenho a escrever todos os tipos de loops e cheques para construir algo assim manualmente?

questionAnswers(5)

yourAnswerToTheQuestion