Hilfe zu Vergleich von float member-Variablen mit Komparatoren
Ich bin in der Lage, vergleichen Sie Zeichenfolgen in Ordnung, aber würde gerne wissen, wie kann ich Rang floating-point-zahlen?
getChange() gibt einen String zurück. Ich möchte in der Lage sein, zu Sortieren und absteigend Sortieren. Wie kann ich dies tun?
UPDATE:
package org.stocktwits.helper;
import java.util.Comparator;
import org.stocktwits.model.Quote;
public class ChangeComparator implements Comparator<Quote>
{
public int compare(Quote o1, Quote o2) {
float change1 = Float.valueOf(o1.getChange());
float change2 = Float.valueOf(o2.getChange());
if (change1 < change2) return -1;
if (change1 == change2) return 0; //Fails on NaN however, not sure what you want
if (change2 > change2) return 1;
}
}
Bin ich immer der compile-Zeit-Fehler:
This method must return a result of type int ChangeComparator.java
Abgesehen von dem NaN-Problem, Sie haben keinen garantierten return-Anweisung in Ihrem code. Realistisch Sie tun, aber der compiler kann nicht sagen, dass, weil Sie haben drei verschiedene if-Anweisungen. Kann es nicht beurteilen, diejenigen, die erst zur Laufzeit, so dass es denkt, Sie könnte tatsächlich auf den letzten if-Anweisung und es gibt keine return-Klausel.
InformationsquelleAutor Sheehan Alam | 2010-09-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen der javadoc von
Comparator#compare()
Methode.So, im Grunde:
Oder, wenn Sie mögen, bedingte Operatoren:
Sie müssen jedoch berücksichtigen, mit
Float.NaN
. Ich bin nicht sicher, wie Sie Sie haben möchten, Sie bestellt. Erste? Letzte? Gleichermaßen?Ich bin immer der compile-Zeit-Fehler (siehe aktualisierte code in meiner Frage): Diese Methode muss die Rückkehr ein Resultat vom Typ int ChangeComparator.java
Die Kompilierungs-Fehler spricht für sich selbst. Sie müssen sicherstellen, dass Sie immer gibt einen
int
. Ich werde Bearbeiten Sie das Beispiel.InformationsquelleAutor BalusC
Wie wäre es damit:
Beachten Sie, dass Java 1.4 eingeführt
Float#compare(float, float)
(und ein äquivalent inDouble
), das kann so ziemlich direkt:(Nach Bearbeitung, merke ich, dass @BorislavGizdov erwähnt hat dies in seiner Antwort bereits.)
Ist auch erwähnenswert, dass Java 8
Komparator#vergleichen(...)
undKomparator#comparingDouble(...)
eine einfache Art und Weise der Konstruktion dieser Komparatoren direkt.Vergleichen mit boxed
Float
Werte.Vergleichen mit
float
Werte gefördert werden, umdouble
Werte.Gegeben, dass es keine
Comparator#comparingFloat(...)
meine Präferenz wäre, die NutzungcomparingDouble(...)
Methode, da diese nur um die primitive Art der Konvertierung, anstatt Boxen.InformationsquelleAutor msandiford
Können Sie
Float.vergleichen(float f1, float f2)
:InformationsquelleAutor Borislav Gizdov