2015-09-04 4 views
0

mon idée est la suivante. Je veux créer un script, reliant des amis communsAmis en commun java?

Par exemple:

Amis de Damian = [Cristian, Pedro, Juan, Andres]

Amis de Andres = [Marcela, Damian, Julian, Carlos]

amis de Lucas = [John, Damian, Andres, Francisco]

amis de Roman = [Albert, Lourdes, Jennifer, Diego]

Amis de Diego = [Magali, Brian, Andrew, Peter]

Amis de Brian = [etc.]

Amis de Leo = [etc.]

Amis de Ramiro = [Etc. ]

amis de Franco = [etc.]

je devrais sélectionner 5 noms et je dois dire que si des amis en commun et quels sont les noms. Les noms seront limités à 60 env. Et ils seront 4 noms pour les groupes.

+0

Quelle est votre question? –

+0

Comme je peux élever ce script? –

Répondre

0

Je suppose par Java commun, vous parlez de Java et Javascript. Cependant vous l'avez appelé un script ... un extrait de code est également un must pour obtenir de bonnes réponses en cas de débordement de pile, je ne sais pas si vous utilisez des tableaux, des listes, ou même des cartes ... Je vais donner une réponse pour chaque. Mais s'il vous plaît, donnez des informations plus détaillées la prochaine fois que vous posez une question.

Les listes ont une méthode appelée contains() dans laquelle vous pouvez passer un objet. De là, il y a deux façons de travailler avec elle, la façon préférée est par listes

package com.gamsion.chris; 

import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 

public class SOListExample { 
    public static void main(String[] args) { 
     List<String> list1 = new ArrayList<String>(); 
     List<String> list2 = new ArrayList<String>(); 
     List<String> list3 = new ArrayList<String>(); 
     String name1 = "John"; 
     String name2 = "Chris"; 
     String name3 = "Madalyn"; 
     list1.add(name1); 
     list2.add(name1); 
     list2.add(name2); 
     list3.add(name2); 
     list3.add(name3); 
     list1.add(name3); 
     list2.add(name3); 
     List<List<String>> lists = new ArrayList<List<String>>(); 
     lists.add(list1); 
     lists.add(list2); 
     lists.add(list3); 
     System.out.println(getCommonFriends(lists)); 
    } 

    public static List<String> getCommonFriends(List<List<String>> lists) { 
     List<String> commonfriends = lists.get(0); 
     Iterator<List<String>> it = lists.iterator(); 
     while(it.hasNext()){ 
      commonfriends.retainAll(it.next()); 
     } 
     return commonfriends; 
    } 
} 

C'est la meilleure réponse que je peux donner. Bien sûr, adaptez-vous à vos besoins et cela devrait bien aller. (Je l'ai juste fait comme un exemple testable, la façon dont vous obtenez ces listes et combien vous dépend totalement.) C'est aussi le plus efficace pour autant que je sache, bien que l'initiale "commonfriends = lists, get (0)" ne m'ennuie pas haha.

EDIT: Ajout de la réponse pour le commentaire ci-dessous.

Pour ce faire, suggère d'ajouter une autre méthode qui compare simplement deux listes comme ceci:

public static List<String> compareCommonFriends(List<String> list1, List<String> list2){ 
    list1.retainAll(list2); 
    return list1; 
} 

en cas Aussi, vous voulez faire une si quelque chose a été trouvé, que ce soit les compareCommonFreinds() ou les getCommonFriends(), vous pouvez faire quelque chose comme ceci:

if(compareCommonFriends(list1, list2).isEmpty()){ 
    //your code 
    } 
    //OR 
if(!compareCommonFriends(list1, list2).isEmpty()){ 
    //your code 
} 
+0

Merci beaucoup pour la réponse! Essayez le script et répondez à mes besoins. Mais comment pourrais-je faire cela si aucun nom en commun dans au moins 2 des x listes mentionnées, je les montre aussi? –

+0

@RomanRacca Réponse ajouté à votre commentaire! J'espère que c'est utile. – Gamma2626

1

Utilisez Collection#retainAll().

listA.retainAll(listB); 
// listA now contains only the elements which are also contained in listB. 

donc faire une copie de la première liste et répétez retainAll pour les cinq listes. Je pense que ce serait un moyen facile de le faire.

référence cette réponse Common elements in two lists