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 ?

Était-ce utile?

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:

  1. Contruct un HashSet<String> contenant tous les noms de Students dans stud2
  2. Pour chaque Student dans stud1, 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top