How to Modify a Key in a HashMap? (#14496)
This commit is contained in:
parent
933571b813
commit
eb5e9fe2b5
@ -0,0 +1,98 @@
|
|||||||
|
package com.baeldung.map.changekey;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class Player {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public Player(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (!(o instanceof Player)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = (Player) o;
|
||||||
|
|
||||||
|
return name.equals(player.name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return name.hashCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HashmapChangeKeyUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenRemoveThenPutWithTheNewKey_thenGetExpectedResult() {
|
||||||
|
Map<String, Integer> playerMap = new HashMap<>();
|
||||||
|
|
||||||
|
playerMap.put("Kai", 42);
|
||||||
|
playerMap.put("Amanda", 88);
|
||||||
|
playerMap.put("Tom", 200);
|
||||||
|
|
||||||
|
// now replace Kai with Eric
|
||||||
|
playerMap.put("Eric", playerMap.remove("Kai"));
|
||||||
|
|
||||||
|
assertFalse(playerMap.containsKey("Kai"));
|
||||||
|
assertTrue(playerMap.containsKey("Eric"));
|
||||||
|
assertEquals(42, playerMap.get("Eric"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void whenChangeTheKey_thenMayNotGetExpectedResult() {
|
||||||
|
Map<Player, Integer> myMap = new HashMap<>();
|
||||||
|
Player kai = new Player("Kai");
|
||||||
|
Player tom = new Player("Tom");
|
||||||
|
Player amanda = new Player("Amanda");
|
||||||
|
|
||||||
|
myMap.put(kai, 42);
|
||||||
|
myMap.put(amanda, 88);
|
||||||
|
myMap.put(tom, 200);
|
||||||
|
|
||||||
|
assertTrue(myMap.containsKey(kai));
|
||||||
|
|
||||||
|
//change Kai's name to Eric
|
||||||
|
kai.setName("Eric");
|
||||||
|
assertEquals("Eric", kai.getName());
|
||||||
|
|
||||||
|
Player eric = new Player("Eric");
|
||||||
|
assertEquals(eric, kai);
|
||||||
|
|
||||||
|
// the map contains neither Kai nor Eric:
|
||||||
|
assertFalse(myMap.containsKey(kai));
|
||||||
|
assertFalse(myMap.containsKey(eric));
|
||||||
|
|
||||||
|
// although the Player("Eric") exists:
|
||||||
|
long ericCount = myMap.keySet()
|
||||||
|
.stream()
|
||||||
|
.filter(player -> player.getName()
|
||||||
|
.equals("Eric"))
|
||||||
|
.count();
|
||||||
|
|
||||||
|
assertEquals(1, ericCount);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user