Ho una classe che vorrei usare in scala.collection.mutable.PriorityQueue, ma non voglio renderlo ordinato [A] solo per questo scopo. Non considero l'ordine che voglio usare rispetto a PriorityQueue come l'ordinamento naturale della classe.Scala: C'è un modo per utilizzare PriorityQueue come farei in Java?
class MyObject (sequence: Int, values: List[String]) ...
Quindi, nel mio PriorityQueue, vorrei che i valori fossero ordinati per "sequenza". Tuttavia, solo perché due oggetti hanno la stessa sequenza non li rende naturalmente uguali poiché il contenuto dei loro "valori" potrebbe essere diverso.
Qui è dove, in Java, è bello essere in grado di fornire un oggetto Comparator alternativo a PriorityQueue. Il mio comparatore ordina semplicemente gli oggetti rispetto alla loro "sequenza" e ignora i loro "valori".
La classe CodaConPriorita deve essere parametrizzato con un "A <% ordinato [A]"
class PriorityQueue[A <% Ordered[A]] extends ...
Da quello che ho letto, questo significa che la mia classe deve estendere ordinato [A] o devo fornire una Conversione di tipo "implicito" su Ordinato [A], che, onestamente, si sente inelegante.
La soluzione Java sembra più "funzionale", permettendomi di passare un oggetto simile a una funzione Comparator invece di costringermi a una gerarchia di classi o a cercare la mia classe.
Mi rendo conto che ci sono alternative all'utilizzo di PrioirityQueue, ma mi sembra che mi stia sbattendo contro la curva di apprendimento di Scala qui e non voglio rinunciare senza esplorare completamente questa decisione di progettazione.
Questa è solo una decisione sfortunata nella libreria Scala o sto fraintendendo una sorta di convenzione di chiamata che rende PriorityQueue più utilizzabile e "funzionale"?
Grazie