Если ли встроенный способ перебора с добавлением в Set, Map - коллекции?

108
15 февраля 2021, 09:20

Для List коллекции на такой случай есть расширенный итератор ListIterator.

А для Set и Map действительно что ли ничего (метод, класс и т. п.) для перебора с добавлением нет?

Answer 1

Для Set существует итератор:

HashSet<String> set= new HashSet<String>();
Iterator iterator = set.iterator(); 
while (iterator.hasNext()) {
    System.out.println(iterator.next());  
}

Или так:

Set<String> set;
for ( String s : set )
    System.out.println(s);

Map можно перебрать так(нужно создать свой итератор):

Iterator<Map.Entry<String, String>> entries = map.entrySet().iterator();
while (entries.hasNext()) {
    Map.Entry<String, String> entry = entries.next();
    System.out.println(entry.getKey() + "  " + entry.getValue());
}

Костыльный способ для доступа по индексу(и удалению):

ArrayList<String> list = new ArrayList<String>();
for(int i = 0; i < set.size(); i++) {
    list.add((String) set.toArray()[i]);
    System.out.println(list.get(i));
}
Answer 2

HashMap и HashSet не гарантируют порядка, поэтому доступ по индексу не имеет смысла. А для перебора и изменения можно использовать стандартный StreamApi

Set<Integer> set = Set.of(-1, 1, 2, 3, 4, 5, -10);
        set = set.stream()
                .filter(i -> i > 0)    // Отсеиваем отрицательные
                .map(i -> i * 2)       // Умножаем на 2
                .collect(Collectors.toSet()); // Собираем в новый Set
READ ALSO
Обфускация api-key от firebase

Обфускация api-key от firebase

Каким образом можно обфусцировать api-key от firebase в android приложении на javaApi-ключ лежит в google-services

116
DriverManager автоматически ищет драйвера только при старте?

DriverManager автоматически ищет драйвера только при старте?

При попытке получить connection через DriverManager получал SQLExceptionЭто все на tomcat

93
Как сохранять состояние view и presenter

Как сохранять состояние view и presenter

Как сохранить presenter при смене конфигурации телефона, например при повороте? Прочитал много способов, но так и не понял, какой лучше всего использоватьЗнаю...

125
Пеерепесать jquery =&gt; vanila js

Пеерепесать jquery => vanila js

начал изучать vue js и столкнулся с проблемойвот такой воот просто скрипт я использовал для анимированого отступа на jquery

99