Итерация по массиву множеств - PullRequest
0 голосов
/ 11 марта 2020

В настоящее время я пытаюсь перебрать массив списков, содержащих строки. Это выглядит так:

ArrayList<Set<String>> e = new ArrayList<Set<String>>(Size);

    for(int i = 0; i < e.size(); i++) {
        for(Object obj: e) {
            System.out.println(e);
        }
    }

Я пытаюсь получить доступ к строкам внутри набора и изменить их (предварительно напечатано, чтобы увидеть, сработало ли это), но я не могу найти способ добраться до них. Есть идеи?

Ответы [ 3 ]

2 голосов
/ 11 марта 2020

Вы не можете изменить строку; если вы хотите изменить одну из строк в Set s, вы должны удалить ее и добавить новую.

Относительно (простой) итерации:

for( var set : e )
{
  for( var string : set )
  {
     out.println( string );
  }
}

Если вы хотите изменить содержимое вашей структуры данных:

for( var set : e )
{
  Set<String> newStrings = new HashSet<>();
  for( var i = set.iterator(); i.hasNext(); )
  {
    var string = i.next();
    if( isInvalid( string ) )
    { 
      i.remove();
      newStrings.add( calculateNewString( string ) );
    } 
  }
  set.addAll( newStrings );
}
0 голосов
/ 11 марта 2020

Эй, я могу помочь вам с доступной частью, поэтому вы должны использовать foreach l oop вот так

ArrayList<Set<String>> e = new ArrayList<Set<String>>();

    for (Set<String> oneSet : e) {

        for (String oneString : oneSet) {

            oneString
            //do something...
        }
    }
0 голосов
/ 11 марта 2020
ArrayList<Set<String>> e = new ArrayList(size);
//Fill your sets with data here

for(Set<String> set : e) { //Iterate through the Arraylist getting every set
    for(String element : set) { //Iteretae through the current Set getting every String
        System.out.println(element);
    }
}
...