Skip to content

Commit b228095

Browse files
authored
Convert getOrDefault() calls that create collections to computeIfAbsent(). (#10431)
Convert getOrDefault() calls that create collections to computeIfAbsent(). These are cheaper since the empty collections are not constructed if present and can avoid an extra put() call afterward, since computeIfAbsent() will add the new value, unlike getOrDefault().
1 parent 9fbf0b2 commit b228095

File tree

5 files changed

+12
-27
lines changed

5 files changed

+12
-27
lines changed

game-app/game-core/src/main/java/games/strategy/triplea/TripleAPlayer.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -780,15 +780,12 @@ public Map<Territory, Map<Unit, IntegerMap<Resource>>> selectKamikazeSuicideAtta
780780
for (final Entry<Territory, IntegerMap<Unit>> selectionEntry : selection.entrySet()) {
781781
final Territory territory = selectionEntry.getKey();
782782
final Map<Unit, IntegerMap<Resource>> currentTerr =
783-
kamikazeSuicideAttacks.getOrDefault(territory, new HashMap<>());
783+
kamikazeSuicideAttacks.computeIfAbsent(territory, key -> new HashMap<>());
784784
for (final Entry<Unit, Integer> unitEntry : selectionEntry.getValue().entrySet()) {
785785
final Unit unit = unitEntry.getKey();
786-
final IntegerMap<Resource> currentUnit =
787-
currentTerr.getOrDefault(unit, new IntegerMap<>());
788-
currentUnit.add(resource, unitEntry.getValue());
789-
currentTerr.put(unit, currentUnit);
786+
final Integer amount = unitEntry.getValue();
787+
currentTerr.computeIfAbsent(unit, key -> new IntegerMap<>()).add(resource, amount);
790788
}
791-
kamikazeSuicideAttacks.put(territory, currentTerr);
792789
}
793790
}
794791
return kamikazeSuicideAttacks;

game-app/game-core/src/main/java/games/strategy/triplea/ai/AbstractBuiltInAi.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -309,10 +309,7 @@ public Map<Territory, Map<Unit, IntegerMap<Resource>>> selectKamikazeSuicideAtta
309309
(UnitAttachment.get(u.getType()).getHitPoints()
310310
* (Math.random() < .3 ? 1 : (Math.random() < .5 ? 2 : 3))));
311311
resourceMap.put(resource, num);
312-
final Map<Unit, IntegerMap<Resource>> attMap =
313-
kamikazeSuicideAttacks.getOrDefault(t, new HashMap<>());
314-
attMap.put(u, resourceMap);
315-
kamikazeSuicideAttacks.put(t, attMap);
312+
kamikazeSuicideAttacks.computeIfAbsent(t, key -> new HashMap<>()).put(u, resourceMap);
316313
attackTokens.add(resource, -num);
317314
if (attackTokens.getInt(resource) <= 0) {
318315
attackTokens.removeKey(resource);

game-app/game-core/src/main/java/games/strategy/triplea/attachments/TechAbilityAttachment.java

+4-6
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,7 @@ private void setUnitAbilitiesGained(final String value) throws GameParseExceptio
480480
final String unitType = s[0];
481481
// validate that this unit exists in the xml
482482
final UnitType ut = getUnitType(unitType);
483-
final Set<String> abilities = unitAbilitiesGained.getOrDefault(ut, new HashSet<>());
483+
final Set<String> abilities = unitAbilitiesGained.computeIfAbsent(ut, key -> new HashSet<>());
484484
// start at 1
485485
for (int i = 1; i < s.length; i++) {
486486
final String ability = s[i];
@@ -494,7 +494,6 @@ private void setUnitAbilitiesGained(final String value) throws GameParseExceptio
494494
}
495495
abilities.add(ability);
496496
}
497-
unitAbilitiesGained.put(ut, abilities);
498497
}
499498

500499
private void setUnitAbilitiesGained(final Map<UnitType, Set<String>> value) {
@@ -678,10 +677,9 @@ public static Map<String, Set<UnitType>> getAirborneTargettedByAa(
678677
final Map<String, Set<UnitType>> mapAa = taa.getAirborneTargettedByAa();
679678
if (mapAa != null && !mapAa.isEmpty()) {
680679
for (final Entry<String, Set<UnitType>> entry : mapAa.entrySet()) {
681-
final Set<UnitType> current =
682-
airborneTargettedByAa.getOrDefault(entry.getKey(), new HashSet<>());
683-
current.addAll(entry.getValue());
684-
airborneTargettedByAa.put(entry.getKey(), current);
680+
airborneTargettedByAa
681+
.computeIfAbsent(entry.getKey(), key -> new HashSet<>())
682+
.addAll(entry.getValue());
685683
}
686684
}
687685
}

game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/BattleDelegate.java

+1-4
Original file line numberDiff line numberDiff line change
@@ -1298,10 +1298,7 @@ private void doKamikazeSuicideAttacks() {
12981298
continue;
12991299
}
13001300
}
1301-
final Collection<Territory> currentTerrs =
1302-
kamikazeZonesByEnemy.getOrDefault(owner, new ArrayList<>());
1303-
currentTerrs.add(t);
1304-
kamikazeZonesByEnemy.put(owner, currentTerrs);
1301+
kamikazeZonesByEnemy.computeIfAbsent(owner, key -> new ArrayList<>()).add(t);
13051302
}
13061303
}
13071304
if (kamikazeZonesByEnemy.isEmpty()) {

game-app/game-core/src/main/java/games/strategy/triplea/delegate/battle/ScrambleLogic.java

+3-7
Original file line numberDiff line numberDiff line change
@@ -152,15 +152,11 @@ public Collection<Unit> getUnitsThatCanScramble() {
152152
((DependentBattle) battle).getAmphibiousAttackTerritories();
153153
amphibFromTerrs.removeAll(territoriesWithBattlesWater);
154154
for (final Territory amphibFrom : amphibFromTerrs) {
155-
final Set<Territory> canScrambleFrom =
156-
scrambleTerrs.getOrDefault(amphibFrom, new HashSet<>());
157155
if (toAnyAmphibious) {
158-
canScrambleFrom.addAll(getCanScrambleFromTerritories(amphibFrom));
156+
final Collection<Territory> territories = getCanScrambleFromTerritories(amphibFrom);
157+
scrambleTerrs.computeIfAbsent(amphibFrom, key -> new HashSet<>()).addAll(territories);
159158
} else if (canScrambleFromPredicate.test(battleTerr)) {
160-
canScrambleFrom.add(battleTerr);
161-
}
162-
if (!canScrambleFrom.isEmpty()) {
163-
scrambleTerrs.put(amphibFrom, canScrambleFrom);
159+
scrambleTerrs.computeIfAbsent(amphibFrom, key -> new HashSet<>()).add(battleTerr);
164160
}
165161
}
166162
}

0 commit comments

Comments
 (0)