query.where((Predicate[]) predicates.toArray(new Predicate[0]));
query.where((Predicate[]) predicates.toArray(new Predicate[0]));
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);