2017-09-02 1 views
0

J'ai une liste de mon objet de classe (EmployerDetails). Les détails de l'employeur comprennent 4 paramètres. La liste peut contenir tous les objets avec différents paramètres ou paramètres peuvent être identiques pour plus d'un objet dans cette liste. ma classe est quelque chose comme ceci:Exactement une valeur correspondante dans la liste de l'objet où l'objet consiste en 4 propriétés

public class EmployerDetails { 

    private String employerId; 
    private String occupationCode; 
    private String SchemeCategory; 
    private String switchingFlag; 
} 

Je l'ai utilisé ArrayList pour récupérer les objets.

Supposons que j'ai une liste d'objets 10 employeur ensemble de données comme ceci:

Employeur Id est la même dans tous les 10 objets. Le code d'occupation est le même dans 4 objets, différents dans 5 objets et null dans un objet.

SchemeCategory est différent dans l'objet 9 et null dans un objet.

switchingFlag pourrait être Y ou N.

Maintenant, mon problème est, j'ai une occupationCode et un schemeCategory avec moi et je dois récupérer l'objet qui satisfait ma condition et la condition est la suivante: Les enregistrements avec le même employeur (qui est l'exemple ci-dessus sont 10), je dois récupérer l'enregistrement qui correspond à mon code d'occupation et il devrait y avoir exactement une correspondance. Par exemple, si mon MétierCode correspond à 4 objets, je passerai cette condition et passerai à la condition 2 qui est: Je récupérerai l'enregistrement où le code occupationCode n'est pas nul et le schemeCategory correspond à ma schemeCategory. et encore une troisième condition.

Actuellement, je suis l'itération de la liste en utilisant pour chaque boucle, dans la condition 1 si le code occupationCode de l'objet correspond à mon OccupationCode, il ira à l'intérieur if condition. Dans l'exemple ci-dessus, il ira 4 fois, mais en itérant, je dois récupérer l'enregistrement seulement s'il y a un match.

Je pourrais utiliser le compteur et mettre l'objet dans HashMap et après que la boucle soit terminée si count == 1, récupérer l'objet mais le problème est ici, j'ai 4 conditions comme ça et je dois écrire pour boucle pour toutes les conditions et après itération, s'il n'y a pas de résultat, alors je dois répéter pour la condition 2 et ainsi de suite.

Y at-il une solution à ce problème? J'utilise Java 7 et je ne peux pas utiliser Java 8.

Merci.

+1

* Y at-il une solution à ce problème? * Oui, il y en a probablement. Quelle est votre vraie question? –

+0

quel est le moyen le plus court de le faire? Selon ma logique, je dois utiliser pour boucle pour toutes les conditions. –

+0

Il n'y a aucun moyen d'éviter les boucles, si c'est votre question. Que diriez-vous de publier le code que vous avez, sur codereview.stackexchange.com, au lieu de nous demander de fournir le code pour vous? –

Répondre

0

je pourrais penser à 2 solutions En supposant que vous avez ces informations pour correspondre employerId, occupationCode, SchemeCategory et switchingFlag ->

Solution1: forment une chaîne en enchaînant tous ces 4 valeurs - permet de l'appeler expectedAggregateString. En classe EmployerDetails ajouter cette méthode

private String getAggregatedStringVal() { 
     StringBuilder str = new StringBuilder(employerId); 
     str.append(occupationCode); 
     str.append(SchemeCategory); 
     str.append(switchingFlag); 
     return str.toString(); 
    } 

Dans un seul itérer boucle- la liste et comparer la expectedAggregateString avec chacun méthode getAggregatedStringVal de l'objet en boucle. Le premier match - rompre la boucle.

Solution 2: au lieu de chaîne, créer un EmployerDetails objet attendu depuis que selon mon hypothèse que vous avez toutes les 4 valeurs requises pour les EmployerDetails obj. Dans la classe EmployerDetails, générez la méthode equals() et hashcode() et, dans une boucle unique, comparez chacun des objets de la boucle avec les objets EmployerDetails attendus. Le premier match - rompre la boucle.

+0

Mon exigence est, je dois correspondre à la occupationCode avec le code d'occupation dans l'objet liste, s'il n'y a pas de correspondance ou plus d'un match, alors je dois vérifier la deuxième condition et s'il n'y a pas de correspondance, je dois vérifier la troisième condition et ainsi de suite. Je ne pense pas que ce soit possible avec la solution fournie. Veuillez vous référer au code: https://codereview.stackexchange.com/questions/174647/exact-one-matching-value-in-list-of-object-where-object-consist-4-properties –

+0

La solution que vous avez fournie travailler s'il n'y a qu'une seule condition mais je dois vérifier plus de 3 conditions et je dois vérifier dans cette séquence seulement. –