2013-05-07 2 views
-3

Je suis encore très jeune à Java et je rencontre beaucoup de problèmes avec l'organisation du code. Je sais qu'une classe devrait contenir des données et des méthodes qui fonctionnent sur ces données, mais je trouve toujours (ce qui me semble) des zones grises quant à la façon dont le code devrait être organisé.Où/Comment implémenter un comparateur

Par exemple, j'ai Object1 qui contient des données et des méthodes qui fonctionnent sur les données. Object1 contient une méthode qui renvoie (obtient) une carte non triée des données dérivées de cette classe. Dans la classe DifferentObject1, j'utilise les données de Object1 pour créer un graphique de ces données. DifferentObject1 a besoin que les données de la carte reçue soient triées. Les clés de la carte sont des chaînes et les valeurs sont flottantes.

Mon objectif est de trier la carte du plus grand au plus petit selon la valeur du flotteur. En ce qui concerne l'organisation du code, où devrait-on trier ces données? À l'heure actuelle, la variable _myData est une carte de données non triée. En outre, l'implémentation de Comparator sur une classe est-elle le meilleur moyen de trier la carte?

Voici un code pour vous aider à visualiser:

public class Object1 
{ 
    private Map<String, float> _myData = new HashMap<String, float>(); 

    public Object1 
    { 
     *do stuff....* 
    } 

    public Map<String, float> getMyData() { return _myData; } 
} 

public class DifferentObject1 
{ 
    public DifferentObject1(Object1 obj1) 
    { 
     *do stuff with obj1* 
    } 
} 

Donc, fondamentalement ma classe DifferentObject1 devrait afficher un graphique des données après Sorted ma classe DifferentObject1 est effectuée en utilisant les données pour construire le graphe.

+0

Que se passe-t-il avec cet endroit? Je descends des voix et je ne sais même pas pourquoi. –

+2

Je n'ai pas voté bas vous et je ne prévois pas, mais je soupçonne que c'est parce que si vous tapez les mots "comparateur java" dans google, [c'est le premier lien renvoyé] (http: //www.vogella .com/blog/2009/08/04/collections-sort-java /) Je suggère de lire ça. De plus, les 'Map's ne sont pas à trier. – durron597

+0

Merci pour cela. J'ai fait des recherches, mais parfois je ne comprends pas toujours ce que je lis et les solutions fournies. C'est pourquoi j'ai posé la question ici. Je cherchais plus de profondeur pour comprendre mon problème. –

Répondre

1

La conception appropriée est en partie une question de style, mais surtout une question de logique. Si le tri des données est logiquement lié aux données elles-mêmes, il est logique que la classe qui représente les données implémente l'interface Comparable (et, de plus, représente les données d'une manière toujours triée). Si la définition de l'ordre de tri est contextuelle (ce qui semble être le cas dans votre application), il est plus logique de définir un Comparator approprié au contexte.

1

Eh bien, à ma connaissance, Map n'est pas adapté pour trier les valeurs. TreeMap insère les éléments dans l'ordre des touches, mais si vous voulez trier les valeurs, vous devrez d'abord obtenir la collection de valeurs (méthode values ​​()), puis la trier en tant que collection.

+0

Quelle classe devrait faire le tri?La classe le qui nécessite des données triées, ou la classe qui obtient les données? –

+1

Celui qui nécessite les données (celui qui appelle getMyData()) – Igor