Oii, Jose Eudes! Como vai?
Sim, a sua solução é excelente! Ela não apenas funciona corretamente, como também traz uma vantagem interessante de legibilidade no resultado final.
Vou te explicar a diferença entre a sua abordagem e a do gabarito para você entender as nuances:
1. A sua abordagem (groupingBy)
Você usou o Collectors.groupingBy com uma lógica ternária (condição ? valor1 : valor2).
- Vantagem: Você personalizou as chaves do Map. O resultado final é um
Map<String, List<Integer>>. Isso significa que, ao imprimir, você vê claramente Par=[2, 4, 6] e impar=[1, 3, 5]. É muito amigável para leitura humana. - Flexibilidade: O
groupingBy é ideal quando você pode ter mais de dois grupos (ex: "Pequeno", "Médio", "Grande").
2. A abordagem da aula (partitioningBy)
O gabarito utiliza o Collectors.partitioningBy.
- Como funciona: Ele é uma especialização do agrupamento feita especificamente para casos binários (verdadeiro ou falso).
- Resultado: Ele gera um
Map<Boolean, List<Integer>>. As chaves serão sempre true e false. - Vantagem: Semanticamente, ele deixa claro que a lista foi apenas "partida ao meio" com base em uma condição.
Resumo da comparação:
| Método | Tipo de Chave | Uso ideal |
|---|
| Seu código | String ("Par", "impar") | Quando você quer dar nomes personalizados aos grupos. |
| Gabarito | Boolean (true, false) | Quando a divisão é estritamente binária (sim/não) e você não se importa com os nomes das chaves. |
Portanto, seu código é um código bem escrito.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!