Je stocke des objets Item dans un ArrayList. La classe Item a un champ flottant appelé field1
. Je souhaite récupérer les objets Item de itemsList
dans l'ordre décroissant de field1
.
List<Item> itemsList = new ArrayList<Item>();
itemsList.add(new Item(...));
Voici ce que j'ai essayé:
public class Item implements Comparable {
//...
public float compareTo(Item it)
{
return(similarity - it.similarity);
}
}
List<Item> sortedItems = Collections.sort(itemsList);
Le problème est que compareTo
devrait renvoyer int
, alors que j'ai float
. Alors, quelle approche dois-je appliquer pour trier les valeurs float
?
3 réponses
La signature de la méthode doit être:
public int compareTo(Item it)
Au lieu de renvoyer un float
. Pour le moment, vous n'implémentez pas l'interface Comparable
.
La mise en œuvre la plus simple serait:
public int compareTo(Item it) {
return Float.compare(similarity, it.similarity);
}
CompareTo est supposé renvoyer seulement 3 valeurs possibles. 1, 0, -1. 1 signifie que l'objet est plus grand que ce à quoi il est comparé, 0 signifie qu'ils sont égaux et -1 signifie que l'objet est plus petit que ce à quoi il est comparé. Votre méthode compareTo devrait donc être assez simple.
public int compareTo(Item it)
{
if(this.field1 < it.getField1()) {
return -1;
}
else if( this.field1 > it.getField1()) {
return 1;
}
else {
return 0;
}
}
La valeur de retour exacte de campareTo()
n'a pas d'importance. Il est soit inférieur à 0, exactement 0 ou supérieur à 0. vous pouvez par exemple renvoyer -1 pour chaque différence inférieure à 0, 1 pour chaque différence supérieure à 0 et enfin 0 pour 0.
Comme Float
est déjà comparable, ce serait facile: similarity.compareTo(it.similarity)
De nouvelles questions
java
Java est un langage de programmation de haut niveau. Utilisez cette balise lorsque vous rencontrez des problèmes pour utiliser ou comprendre la langue elle-même. Cette balise est rarement utilisée seule et est le plus souvent utilisée en conjonction avec [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] et [maven].