117 votes

Java compare deux listes

J'ai deux listes ( pas des listes java, on peut dire deux colonnes)

Par exemple

**List 1**            **Lists 2**
  milan                 hafil
  dingo                 iga
  iga                   dingo
  elpha                 binga
  hafil                 mike
  meat                  dingo
  milan
  elpha
  meat
  iga                   
  neeta.peeta    

Je voudrais une méthode qui renvoie combien d'éléments sont identiques. Pour cet exemple, cela devrait être 3 et elle devrait me renvoyer les valeurs similaires des deux listes ainsi que des valeurs différentes.

Dois-je utiliser hashmap si oui alors quelle méthode pour obtenir mon résultat ?

Veuillez m'aider

P.S. : Ce n'est pas un devoir scolaire :) Donc si vous me guidez, ce sera suffisant.

1 votes

Veuillez suggérer une structure de données, la liste n'est pas une liste java ou hashmap ou toute autre structure de données.

2 votes

Pensez à ce que vous devez faire dans des cas exceptionnels. Les listes peuvent-elles contenir deux fois la même valeur ? Si c'est le cas, si "dingo" figure deux fois dans les deux listes, cela compte-t-il comme deux éléments en commun ou comme un seul ?

0 votes

Pouvez-vous modifier l'une des listes ?

7voto

Utilisation de java 8 removeIf

public int getSimilarItems(){
    List<String> one = Arrays.asList("milan", "dingo", "elpha", "hafil", "meat", "iga", "neeta.peeta");
    List<String> two = new ArrayList<>(Arrays.asList("hafil", "iga", "binga", "mike", "dingo")); //Cannot remove directly from array backed collection
    int initial = two.size();

    two.removeIf(one::contains);
    return initial - two.size();
}

6voto

Vijay Gupta Points 1669

Une solution simple :-

    List<String> list = new ArrayList<String>(Arrays.asList("a", "b", "d", "c"));
    List<String> list2 = new ArrayList<String>(Arrays.asList("b", "f", "c"));

    list.retainAll(list2);
    list2.removeAll(list);
    System.out.println("similiar " + list);
    System.out.println("different " + list2);

Sortie :-

similiar [b, c]
different [f]

1voto

Stefan Kendall Points 28274

En supposant que hash1 y hash2

List< String > sames = whatever
List< String > diffs = whatever

int count = 0;
for( String key : hash1.keySet() )
{
   if( hash2.containsKey( key ) ) 
   {
      sames.add( key );
   }
   else
   {
      diffs.add( key );
   }
}

//sames.size() contains the number of similar elements.

0 votes

Il veut la liste des clés identiques, pas combien de clés sont identiques. Je pense.

0 votes

Merci stefan pour ton aide. Oui, Rosdi a raison et vous aussi. J'ai besoin du nombre total de valeurs similaires et des valeurs similaires également.

1voto

Manoj Kumar Points 101

J'ai trouvé un exemple très basique de comparaison de listes à l'adresse suivante Comparer les listes Cet exemple vérifie d'abord la taille, puis la disponibilité de l'élément particulier d'une liste dans une autre.

0voto

Pavan Rangani Points 1
public static boolean compareList(List ls1, List ls2){
    return ls1.containsAll(ls2) && ls1.size() == ls2.size() ? true :false;
     }

public static void main(String[] args) {

    ArrayList<String> one = new ArrayList<String>();
    one.add("one");
    one.add("two");
    one.add("six");

    ArrayList<String> two = new ArrayList<String>();
    two.add("one");
    two.add("six");
    two.add("two");

    System.out.println("Output1 :: " + compareList(one, two));

    two.add("ten");

    System.out.println("Output2 :: " + compareList(one, two));
  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X