Предложение forEach для итерации по индексам вектора - PullRequest
3 голосов
/ 08 апреля 2019

У меня есть такой метод:

public void addVector(Vector myVector) {
    if (myVector == null) {
        return;
    }

    Collection<String> values = new ArrayList<>();

    for (int i = 0; i < myVector.size(); i++) {
        values.add(((String[]) myVector.get(i))[1]);
    }

    this.addItems(values);
}

Что касается меня, я не могу понять, как сделать из этого предложение forEach. Можно ли перебирать индексы [i] в ​​цикле forEach?

Ответы [ 3 ]

6 голосов
/ 08 апреля 2019

Вам не нужен индекс, если вы используете расширенный цикл for:

for (Object obj : myVector) {
    values.add(((String[]) obj)[1]);
}

Конечно, лучше использовать параметризованный тип (Vector<String[]>) и избегать приведения.

Или, если вы имели в виду метод forEach:

myVector.forEach(o -> values.add(((String[]) o)[1]));

или, что еще лучше, используйте Stream с collect вместо forEach:

List<String> values = 
    myVector.stream()
            .map(o -> (String[]) o)[1])
            .collect(Collectors.toList());
3 голосов
/ 08 апреля 2019

Или вы могли бы просто сделать

 List<String> values = new ArrayList<>(myVector);

обновление

Если вектор содержит строковые массивы, их необходимо отобразить

List<String> values = myVector.stream().map(arr -> { return arr.length <= 1 ? null : arr[1];}).collect(Collectors.toList());
2 голосов
/ 08 апреля 2019

Вам не нужны индексы, вы можете просто перебирать значения, например:

vector.forEach(el -> values.add(((String[]) el)[1]));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...