Domanda

Java Collections.max accetta solo una raccolta di un oggetto ordinabile. Tuttavia, poiché la raccolta non è necessariamente ordinata, non vedo alcun motivo per non implementare la stessa funzione massima per i tipi iterabili.

Esiste un metodo massimo per Iterable < T estende Comparable < ;? super T > > nella libreria standard di java?

È stato utile?

Soluzione

Collections.max è stato introdotto in 1.2. Iterable è stato introdotto in 1.5.

È raro avere un Iterable che non è un Collection . Se lo fai, è semplice da implementare (fai attenzione a leggere le specifiche). Se ritieni che sia davvero importante puoi inviare una richiesta di offerta su bugs.sun.com (o votare se ce n'è già una lì).

Altri suggerimenti

Sebbene Guava non sia la libreria standard di Java, è abbastanza vicina ...

E com.google.common.collect.Ordering # max (Iterable < E > iterable)

es. T max = Ordering.natural (). max (myIterable);

Il motivo per cui la libreria standard non la implementa, potrebbe essere perché una raccolta deve essere finita , ma un Iterable non deve essere & # 8212; e, probabilmente, si dovrebbe non mai accettare un Iterable se un Iterable non terminante causerebbe il ciclo del tuo codice per sempre.

Hmm ... no, non c'è. Se si desidera utilizzare Collections.max () devi convertire il tuo Iterable in a Collection innanzitutto, probabilmente aggiungendo tutti gli elementi in un Elenco (o Imposta , a seconda dei dati).

Per definizione gli elementi della collezione devono essere "ordinabili" (in particolare, devono implementare Comparable ) poiché per calcolare il massimo, deve essere possibile capire se un elemento è maggiore di un altro (che è esattamente ciò che significa Comparable).

Il metodo max () nella classe Collezioni ha essenzialmente la firma del tipo esatto che hai pubblicato lì, quindi dovrebbe adattarsi al tuo scopo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top