как получить доступ к 2 ключам в hashmap в том же l oop? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь получить доступ к key1 и key2 одинаково для l oop, используя Map.Entry. Но за один раз entry.getKey() возвращает только текущий ключ. Как получить доступ к 2 ключам одновременно?

for(Map.Entry<Long, NodeDisjoint1> entry : map.entrySet()) {
    long parent1 = findSet(entry.getKey());
    long parent2 = findSet(entry.getKey());
}

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Сделайте это следующим образом:

Set<Map.Entry<Long, NodeDisjoint1>> entrySet = map.entrySet();
List<Map.Entry<Long, NodeDisjoint1>> entryList = new ArrayList<>(entrySet);
ListIterator<Map.Entry<Long, NodeDisjoint1>> itr = entryList.listIterator();
long parent1, parent2;
while(itr.hasNext()) {
    parent1 = findSet((Entry)itr.next().getKey());
    if(itr.hasNext()) {
        parent2 = findSet((Entry)itr.next().getKey());
        itr.previous();
    }
}

Демо:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.ListIterator;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        Set<Integer> set = new LinkedHashSet<Integer>(Arrays.asList(10, 20, 30, 40));
        List<Integer> list = new ArrayList<Integer>(set);
        ListIterator<Integer> itr = list.listIterator();
        while (itr.hasNext()) {
            System.out.println(itr.next());
            if (itr.hasNext()) {
                System.out.println(itr.next());
                itr.previous();
            }
        }
    }
}

Выход:

10
20
20
30
30
40
40

Не стесняйтесь в случае любые сомнения / проблемы.

0 голосов
/ 16 апреля 2020

С 1 ENTRYSET вы МОЖЕТЕ ДОСТУПИТЬ ТОЛЬКО К 1 КЛЮЧУ И 1 ЗНАЧЕНИЮ

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