Проблема здесь в том, что вы не используете максимальный размер 3. Ваш код просто проверяет, существует ли URL-адрес в списке один раз.
Отсюда: Попытка найти все вхожденияобъект в Arraylist, в java Я изменил метод таким образом, чтобы получить количество вхождений.
static int indexOfAll(String obj, List<String> list) {
final List<Integer> indexList = new ArrayList<>();
int count = 0;
for (int i = 0; i < list.size(); i++) {
if (obj.equals(list.get(i))) {
++count;
}
}
return count;
}
Если вы используете Java 8+, вы можете использовать потоки, подобные этому:
urls.stream().filter(string -> string.equals(url)).count();
И теперь в вашем условии if вы можете просто вызвать этот метод, чтобы проверить количество вхождений URL-адреса в списке и установить ограничение в 3.
Но это только если вы хотите придерживаться ArrayList.
Более эффективным способом было бы использование карты.Вы можете создать карту, например:
Map<String, Integer> URLCount = new HashMap<>();
И затем вы можете просто добавить URL на эту карту следующим образом:
if (URLCount.containsKey(url)) {
int count = URLCount.get(url);
URLCount.put(url, ++count);
} else {
URLCount.put(url, 1);
}
Или, еще лучше:
URLCount.put(url, (URLCount.getOrDefault(url, 0) + 1));
И затем, чтобы установить ограничение 3, вы можете получить значение с карты.
if (URLCount.containsKey(url)) {
int count = URLCount.get(url);
if (count == 3) {
continue;
}
}
Надеюсь, это поможет.Удачи.