Quote Originariamente inviata da Nikopol Visualizza il messaggio
Infatti gli oggetti che dovrei usare per la priorità devono poter essere comparati esclusivamente in base a un valore double dato da getAsDouble() dell'interfaccia DoubleSupplier e non da un generico criterio dato dall'implementazione di Comparable.

La cosa più banale sarebbe scrivere una coda esclusivamente per questo caso che prende come priorità oggetti P extends DoubleSupplier e fare tutti i confronti con >, <, = inceve che con il compareTo, solo che non mi sembra la soluzione migliore.
Io vorrei (far) ragionare su un aspetto che forse non hai considerato. Se nella tua collezione PriorityQueueHeap hai gli oggetti di "dato" e distintamente i valori per la "priorità", vuol dire che nella struttura dati devono essere mantenuti e ottenibili in qualunque momento entrambi.
Infatti ogni volta che aggiungi un nuovo dato e la sua priorità, devi andare a fare tutta una serie di comparazioni per stabilire dove il nuovo dato va inserito per mantenere coerente il criterio di priorità.

Quindi la domanda è: vuoi mantenere il valore ottenuto subito da getAsDouble() oppure vuoi mantenere l'oggetto DoubleSupplier? Perché se mantieni l'oggetto DoubleSupplier, il valore double fornito non deve cambiare. E siccome il concetto di non-mutabilità non è intrinseco di DoubleSupplier (dipende dalla implementazione, può fornire un valore fisso, una sequenza, valori casuali, ecc...), questa non mi pare una buona soluzione.