Подсчет вхождений данной строки в ArrayList - PullRequest
5 голосов
/ 07 октября 2011

У меня есть список строк, я просматриваю его и подсчитываю количество строк «x», как показано ниже, но счетчик не выводит мне ожидаемое значение:

ArrayList<Integer> list = new ArrayList<Integer>();

List<String> strings = table.getValue(); //this gives  ["y","z","d","x","x","d"]

int count = 0;
for (int i = 0; i < strings.size(); i++) {
    if ((strings.get(i) == "x")) {
        count++;
        list.add(count);
    }
}

System.out.println(list);

это дает [] этодолжно быть 2, как у меня 2 вхождения "х"

Ответы [ 5 ]

13 голосов
/ 07 октября 2011

Уже существует существующий метод для этого:

Collections.frequency(collection, object);

В вашем случае используйте вот так (замените весь ваш опубликованный код этим):

System.out.println(java.util.Collections.frequency(table.getValue(), "x"));
1 голос
/ 07 октября 2011

Вам нужно использовать:

list.get(i).equals("x");

! = / == только проверяет ссылку.

Я не знаю, почему вы используете ArrayList для подсчета.Вы, вероятно, что-то вроде этого:

int count = 0;
for (String s : table.getValue()) {
    if (s.equals("x")) {
        count++;
    }
}
System.out.println( count );
0 голосов
/ 07 октября 2011

Поскольку вы ищете как элементы, так и размер, я бы порекомендовал метод Iterables.filter от Guava

List<String> filtered = Lists.newArrayList(
                     Iterables.filter(myList, 
                                      Predicates.equalTo("x")));
int count = filtered.size();

Но, как все остальные указали, причинаваш код не работает это ==

0 голосов
/ 07 октября 2011

Для String вы должны использовать метод equals.

int ct = 0;
for (String str : table.getValue()) {
    if ("x".equals(str)) { // "x".equals to avoid NullPoniterException
        count++;
    }
}
System.out.println(ct);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...