Я пытаюсь получить рекомендации друзей для пользователей на основе их прямых друзей и ранжировать их по их частоте (например, количество раз, когда рекомендуемый друг появился в списках прямых друзей пользователя). Ниже приведен рабочий код для решения проблемы.Уменьшите количество циклов в коде ниже
public List<String> getFriendsRecommendations(String user)
{
Recommendations rd = new Recommendations();
List<String> result= new ArrayList<String>();
List<String> drfriend = rd.getdirectfriends(user); //return list of direct friend for the user.
List<ArrayList<String>> allfriends = new ArrayList<ArrayList<String>>();
Map<String, Integer> mapfriend = new HashMap<String, Integer>();
List<String> userfriend = rd.getfriends(user); //returns the list of all the friends for a given user.
int counter =0;
for(String s: drfriend)
{
allfriends.add(new ArrayList<String>(rd.getfriends(s)));
rd.intersection(userfriend, allfriends.get(counter), mapfriend);
counter++;
}
result.addAll(mapfriend.keySet());
//Sorting based on the value of hashmap. friend with highest value will be recommended first
Collections.sort(result, new Comparator<String>(){
public int compare(String s1, String s2)
{
if(mapfriend.get(s1) > mapfriend.get(s2))
return -1;
else if(mapfriend.get(s1) < mapfriend.get(s2))
return 1;
else if(mapfriend.get(s1) == mapfriend.get(s2))
{
return s1.compareTo(s2);
}
return 0;
}
});
return result;
}
public void intersection(List<String> lt1, ArrayList<String> lt2, Map<String, Integer> ranked)
{
lt2.removeAll(lt1); // ignoring the friends that user is already connected to
for(String st: lt2)
{
boolean val = ranked.containsKey(st);
if(val)
{
int getval = ranked.get(st);
ranked.put(st, getval+1); //friend name as a key and the value would be the count.
}
else
{
ranked.put(st, 1);
}
}
}
Я хотел бы знать, есть ли более эффективный способ решения вышеуказанной проблемы вместо использования 2 для циклов?
* Я хотел бы знать, есть ли более эффективный способ сделать это? * - делать * что * точно? Кроме того, название вашего вопроса в лучшем случае неоднозначно. –
Попробуйте опубликовать статью об обзоре стека кода –
@JonnyHenly Я хотел бы знать, есть ли способ уменьшить число циклов в приведенном выше коде? – Irfan