2016-06-30 9 views
0

Ich habe eine Sammlung sagenInkrementtaste in einer Sammlung

Map<Integer,Integer> myMap=new Map<Integer,Integer>(); 
myMap.put(1,"a"); 
myMap.put(2,"b"); 
myMap.put(3,"c"); 

Meine Karte hat derzeit {1 = "a", 2 = "b", 3 = "c"}. ich sagen myMap.put(1,"d") So

Angenommen, wollen einen Wert setzen ist es eine Möglichkeit, dass ich bin in der Lage, die vorhandenen Schlüssel und Erhöhen der verbleibenden Schlüssel so meine Ausgangs Karte wie {1 = „d“, 2 =“sein hinzufügen a ", 3 =" b ", 4 =" c "}?

+0

Müssen Schlüssel sequenziell sein? Denn wenn es so ist, hört es sich so an, als ob Sie nach einem Array/einer Liste statt einer Karte suchen (könnte auch funktionieren, wenn Schlüssel nicht sequentiell sind und nur die Reihenfolge der Werte zählt) –

+0

Nein! Ich muss bei der Sammlung bleiben. Nur um die Frage zu stellen, habe ich die Problemstellung vereinfacht und ja Keys muss sequentiell sein. –

Antwort

1

Sie müssen über alle Elemente der Map iterieren, um die Werte für alle vorhandenen Schlüssel zu ändern.

Zum Beispiel Woth Java 8 Streams Sie eine neue Map erzeugen kann, wo die Tasten erhöht werden, und fügen Sie dann den neuen Eintrag:

map = map.entrySet().stream().collect(Collectors.toMap(e->e.getKey()+1,e->e.getValue())); 
map.put(1,"d"); 

Wenn jedoch Ihre Schlüssel aufeinanderfolgenden ganzen Zahlen sind (als Beispiel legt nahe,), warum nicht eine ArrayList<String> anstelle einer Map<Integer,String> verwenden? Dadurch erhalten Sie die gewünschte Funktionalität, indem Sie einfach list.add(0,"d"); aufrufen (mit der kleinen Differenz der Indizes, die bei 0 anstatt bei 1 beginnen).

+0

Iterieren über alle Elemente und schrittweise inkrementieren. Können Sie mir sagen, wie ich das umsetzen soll? –

+0

@TanmayAwasthi siehe bearbeiten – Eran