Могу ли я удалить элемент при перечислении через объект Properties? - PullRequest
2 голосов
/ 28 мая 2010

Могу ли я удалить элемент при перечислении через свойства объект?

Ответы [ 2 ]

5 голосов
/ 28 мая 2010

PropertiesimplementsMap<Object,Object>, так что вы можете перебрать Set.iterator() его Map.entrySet() и на некоторых записях звоните Iterator.remove().

    Properties prop = new Properties();
    prop.put("k1", "foo");
    prop.put("k2", "bar");
    prop.put("k3", "foo");
    prop.put("k4", "bar");

    System.out.println(prop); // prints "{k4=bar, k3=foo, k2=bar, k1=foo}"

    Iterator<Map.Entry<Object,Object>> iter = prop.entrySet().iterator();
    while (iter.hasNext()) {
        Map.Entry<Object,Object> entry = iter.next();
        if (entry.getValue().equals("bar")) {
            iter.remove();
        }
    }
    System.out.println(prop); // prints "{k3=foo, k1=foo}"

Причина, по которой вы хотите позвонить remove() на iterator(), заключается в том, что вы не хотите вызывать ConcurrentModificationException.

Похожие вопросы


Многие новички часто задаются вопросом о значении interface в Java: это отличный пример, чтобы показать, насколько мощным может быть interface. Properties implements Map<Object,Object>, поэтому, если не указано иное, все, что вы можете сделать с Map, вы можете сделать с Properties. Информация в приведенном выше вопросе имеет прямое отношение и непосредственно относится к вашей ситуации.

0 голосов
/ 28 мая 2010

Вы пробовали? (извините, не обращали внимания, вы установили флаг новичок ;))

Свойства - это подкласс HashMap, а HashMap предлагает итератор, который на самом деле является подклассом AbstractMapIterator . Этот итератор реализует метод удаления. Так что ответ - да, если вы итерируете через объект Properties.

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