ArrayList в Java, только один раз выполняя действие - PullRequest
0 голосов
/ 03 октября 2011

По какой-то причине я рисую пробел на этом. У меня есть ArrayList, который содержит компакт-диски (некоторые из них идентичны по названию), и я хочу напечатать строку, которая говорит, сколько у меня есть каждого компакт-диска. Например, строка, которая говорит: «У вас есть: (1) AlbumOne, (2) AlbumTwo, (1) AlbumThree» и т. Д. Компакт-диски не отсортированы. Как я могу это сделать?

Ответы [ 3 ]

2 голосов
/ 03 октября 2011

Один из способов сделать это - выполнить цикл по массиву и использовать карту, в которой объекты используются в качестве ключей, а значения в качестве счетчиков.Итак,

Map<YourObject, Integer> counter ...

Когда вы проходите через массив, выполните get на счетчике для текущего объекта в массиве.Если вы получите значение null, инициализируйте значение в этом сегменте на карте равным 1. Если у вас есть значение, увеличьте его.Затем вы можете перейти к карте, чтобы получить показания.

Обратите внимание, что если вы используете Hashmap, ваши объекты должны правильно реализовать метод hashcode и equals.Вам не нужно использовать свой объект, если у него есть ключи или какое-либо другое отличительное поле, ключи на вашей карте могут быть такими ...

1 голос
/ 03 октября 2011
//aggregate details
Map<String, Integer> albumCounts = new HashMap<String, Integer>();
for (String album : albums) {
    Integer count = albumCounts.get(album); 
    if (count == null) {
        count = 0;
    }
    albumCounts.put(album, count + 1);
}

//print stats
System.out.println("You have:");
for (String album : albums) {
   System.out.println("(" + albumCounts.get(album) + ") " + album);
}
0 голосов
/ 03 октября 2011

Не запутайтесь в Map.Использование Map является подходящим для решения такой проблемы (как вы опубликовали). Поэтому, пожалуйста, посетите эту ссылку (учебное пособие) и прочитайте / узнайте о карте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...