java liste des objets de comparaison
-
11-12-2019 - |
Question
Je vais avoir List<Student> stud1 = new ArrayList<Student>();
et List<Student> stud2 = new ArrayList<Student>();
Et Student
classe est d'avoir des membres comme nom, adresse.
Ce que j'ai à faire , c'est que j'ai de la liste de l'Élève de stud1 (si stud1 du nom de l'Étudiant est égal à stud2 du nom de l'Étudiant).
Comment atteindre cet objectif ?
Je veux savoir, est-t-il déjà les bibliothèques java comme ListUtil pour résoudre ce problème ?
La solution
Bien il existe de nombreux moyens pour comparer des éléments à l'intérieur d'une Collection si vous avez seulement besoin de comparer le nom de étudiants que vous pouvez parcourir et de comparer des noms dans les deux listes, mais je pense que c'est plus élégant de mettre en œuvre Comparable et de créer votre compare_to méthode dans votre Élève de la classe.
Plus d'infos ici : http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html
Autres conseils
Simplement itérer sur les deux et les vérifier et continuer à ajouter dans une liste Si vous souhaitez l'optimiser ensuite
Créer une carte
Map<String, List<Student>> dictionaryMapOfStudents;
puis sélectionnez HashMap
la mise en œuvre et de regarder uniquement pour les étudiants dont le nom correspond en quelque sorte,
Par exemple
A Asdahd, Aasldfalf, Aero
B Baksd, Bajsr, Biro
Alors maintenant, vous avez l'habitude de rechercher la liste complète, réduit de recherche
Cet exemple peut être de vous aide
import java.util.Collection;
import java.util.ArrayList;
import java.util.Arrays;
public class Repeated {
public static void main( String [] args ) {
Collection listOne = new ArrayList(Arrays.asList("milan","dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta"));
Collection listTwo = new ArrayList(Arrays.asList("hafil", "iga", "binga", "mike", "dingo"));
listOne.retainAll( listTwo );
System.out.println( listOne );
}
}
Vous pouvez le faire:
- Contruct un
HashSet<String>
contenant tous les noms deStudent
s dansstud2
- Pour chaque
Student
dansstud1
, vérifier si son nom est dans le jeu et si elle l'est, l'ajouter à la liste de revenir.
Vous pouvez utiliser HashSet pour la recherche de la concordance du nom de:
class Student {
private String name;
private String address;
public Student(String name, String address) {
this.name = name;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
public class Program {
public static void main(String[] args) {
List<Student> s1 = new ArrayList<Student>();
List<Student> s2 = new ArrayList<Student>();
// generate data
for (int i = 0; i < 5; i++) {
Student s = new Student("Student" + i, "");
s1.add(s);
}
for (int i = 0; i < 10; i++) {
Student s = new Student("Student" + i, "");
s2.add(s);
}
// create a lookup HashSet
Set<String> nameSet = new HashSet<String>();
for (Student s : s2) {
nameSet.add(s.getName());
}
List<Student> result = new ArrayList<Student>();
// perform lookup
for (Student s : s1) {
if (nameSet.contains(s.getName())) {
// add the matching student to the result list
result.add(s);
}
}
}
}
Voici un algorithme pour vous:
- Créer la Liste des ensembles de stud3
- Boucle basée sur stud1 int i = 0 à i = (stud1.size() - 1)
- Boucle basée sur stud2 int j = 0 à j = (stud2.size() - 1)
- Vérifier si stud1.get(i).getName() est égal à stud2.get(j).getName()
- Vérifier si stud1.get(i) déjà sur stud3
- continuer
- D'autre
- Ajouter stud1.get(i) à stud3
- Vérifier si stud1.get(i) déjà sur stud3
- Vérifier si stud1.get(i).getName() est égal à stud2.get(j).getName()
- Boucle basée sur stud2 int j = 0 à j = (stud2.size() - 1)