2015-09-20 3 views
0

У меня есть этот код, приведенный ниже, чтобы подсчитать частоту строки в ArrayListПеребор ArrayList из ArrayLists

public static int count (ArrayList<String> c, String str){ 

     int num = 0; 

     num = Collections.frequency(c, str);   


     return num; 


    } 

Что я должен сделать сейчас, чтобы улучшить это так, что функция принимает в ArrayList<ArrayList<String>> и может цикл через набор Arraylists и подсчитать вхождения String. Любые идеи были бы замечательными.

ответ

0

Вы должны использовать два вложенными для петель, цикл по каждому списку с первым и пробегает по каждому элементу текущего списка со вторым, то есть:

int count = 0; 
for (ArrayList<String> list : lists) { 
    for (String string : list) { 
     if (list.equals("something")) count++; 
    } 
} 

Чтобы вычислить частоту вы также необходимо подсчитать общее количество элементов во всех списках, но я оставлю это вам, поскольку теперь это должно быть прямолинейно.

+0

Ваш ответ помог мне, но вам не нужно гнездо. для (ArrayList списка: C) { \t \t \t Num = Num + Collections.frequency (список, ул); \t \t} – Peter3

+0

Я никогда не использовал этот тип цикла перед тем, как поблагодарить – Peter3

0

Чувак, вы описали алгоритм, он не станет проще. Просто введите код.

Имейте в виду, что Collections::frequency является неназванным (IMHO), это должно быть count.

0

В Java 8 использовать поток

public void findOccurenceInLists(ArrayList<ArrayList<String>> lists, String myStr) throws Exception { 
    int occurence = 0; 
    lists.stream().forEach((list) -> { 
     occurence += list.stream().filter((str) -> str.equals(myStr)).count(); 
    }); 
    System.out.println(occurence + " occurence found"); 
} 
+0

Это замечательный момент. Мне нужно больше смотреть в потоки Java 8, поскольку они кажутся довольно мощными. Спасибо за классный новый способ сделать это – Peter3

+0

Добро пожаловать, поток мощный, очень оптимизированный и быстрый, просто попробуйте это;) – ReaperSoon

Смежные вопросы