Java 8 - Contar vezes que o valor de um atributo mudou dentro de uma coleção ou lista

Boa tarde, pessoal. Não tenha ideia de qual seria a melhor saída para este problema.

Tenho uma lista com esta estrutura:

| ID | Date       | Status | Name | Description      | Currency |
|----|------------|--------|------|------------------|----------|
| 1  | 2019-10-01 | 1      | 'A'  | 'Description A'  | USD      |
| 1  | 2019-10-01 | 3      | 'A'  | 'Description A2' | USD      |
| 1  | 2019-10-01 | 4      | 'A2' | 'Description A2' | USD      |
| 2  | 2019-10-03 | 1      | 'B'  | 'Description B'  | USD      |
| 2  | 2019-10-03 | 2      | 'B'  | 'Description B'  | BRL      |
| 2  | 2019-10-03 | 4      | 'B'  | 'Description B'  | USD      |
| 3  | 2019-10-05 | 1      | 'C'  | 'Description C'  | JPY      |
| 3  | 2019-10-05 | 2      | 'C'  | 'Description C2' | JPY      |

Preciso criar outra lista com base nessa primeira, com as informações:

  1. Data;
  2. ID;
  3. Vezes que o Status muoud;
  4. Vezes que o Nome ou Descrição mudaram;
  5. Vezes que a Moeda mudou.
| ID | Date       | Status changes | Name or Description changes | Currency changes |
|----|------------|----------------|-----------------------------|------------------|
| 1  | 2019-10-01 | 2              | 2                           | 0                |
| 2  | 2019-10-03 | 2              | 0                           | 2                |
| 3  | 2019-10-05 | 1              | 1                           | 0                |

Não sei por onde começar. Usar for aninhado é uma boa ideia ou isso é muito “pesado” em processamento?