Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Por que ao invocar o metodo array passa o parâmetro "new Predicate[0]"

query.where((Predicate[]) predicates.toArray(new Predicate[0]));

1 resposta
solução!

oi Danyllo

Vou quebrar em duas linhas só para ficar mais fácil de você enxergar:

Predicate[] arrayPredicados = Predicate[]) predicates.toArray(new Predicate[0]; 
query.where(arrayPredicados);

O método toArray vem da interface Collection e é feio mesmo. Serve para "transformar" uma coleção em uma array. Na verdade ele cria uma array com os mesmos elementos que a coleção original. Pra que? Pois muitas bibliotecas ainda só trabalham com array e não aceitam coisas como List.

O toArray recebe como parametro a array que deve ser injetado os objetos daquela collection. As pessoas tem o habito de mandar de tamanho zero e, como não cabe, o método cria uma nova. O código fica ainda mais sujo com o casting pois Collection.toArray devolve Object[] em sua assinatura.

Uma forma bem mais bonita e legível de fazer isso em Java 8 é usando o stream.toArray (que é outro método de outra interface! só o nome é o mesmo):

query.where(predicates.stream().toArray(tamanho -> new Predicate[tamanho]);

Se você conhece um pouco mais de Java 8 (recomendo fazer o meu curso aqui na Alura :)), pode ainda fazer assim:

query.where(predicates.stream().toArray(Predicate[]::new);

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software