Particionar fluxos java em categorias [duplicado]

Esta pergunta já tem uma resposta aqui:

Lista do Java 8 <V> no mapa <K, V> 19 respostas

eu tenho umstream<A>, Onde

class A {
  String category();
  // ...
}

Eu gostaria de obter ummap<String, list<A>>, onde o fluxo original é particionado em sublistas com base no valor de category (). É bastante trivial implementá-lo usando um loop for, mas é possível obter uma solução mais elegante que aproveite os fluxos java?

EXEMPLO:

Dado{[a, xyz], [a, zyx], [b, abc]}, Gostaria de obter um mapa:

a -> {[a, xyz], [a, zyx]}
b -> {[b, abc]}

questionAnswers(1)

yourAnswerToTheQuestion