[tor-commits] [onionoo/release] Use Map.putIfAbsent and Map.getOrDefault where possible.

karsten at torproject.org karsten at torproject.org
Mon Sep 10 15:29:14 UTC 2018


commit c51c4f20a56e56ff3d72b129666b824712f02d10
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Aug 21 14:46:16 2018 +0200

    Use Map.putIfAbsent and Map.getOrDefault where possible.
---
 .../torproject/onionoo/docs/ClientsHistory.java    |  9 +--
 .../org/torproject/onionoo/docs/NodeStatus.java    |  7 +--
 .../onionoo/server/MostFrequentString.java         | 17 ++----
 .../org/torproject/onionoo/server/NodeIndexer.java | 68 ++++++----------------
 .../onionoo/updater/ClientsStatusUpdater.java      |  8 +--
 .../onionoo/updater/DescriptorSource.java          |  5 +-
 .../onionoo/updater/NodeDetailsStatusUpdater.java  | 20 ++-----
 .../onionoo/updater/UptimeStatusUpdater.java       |  9 +--
 .../onionoo/docs/DummyDocumentStore.java           |  4 +-
 .../onionoo/server/ResourceServletTest.java        |  5 +-
 .../onionoo/updater/DummyDescriptorSource.java     |  9 +--
 11 files changed, 42 insertions(+), 119 deletions(-)

diff --git a/src/main/java/org/torproject/onionoo/docs/ClientsHistory.java b/src/main/java/org/torproject/onionoo/docs/ClientsHistory.java
index 0efe181..1890060 100644
--- a/src/main/java/org/torproject/onionoo/docs/ClientsHistory.java
+++ b/src/main/java/org/torproject/onionoo/docs/ClientsHistory.java
@@ -181,12 +181,9 @@ public class ClientsHistory implements Comparable<ClientsHistory> {
       SortedMap<String, Double> thisResponses,
       SortedMap<String, Double> otherResponses) {
     for (Map.Entry<String, Double> e : otherResponses.entrySet()) {
-      if (thisResponses.containsKey(e.getKey())) {
-        thisResponses.put(e.getKey(), thisResponses.get(e.getKey())
-            + e.getValue());
-      } else {
-        thisResponses.put(e.getKey(), e.getValue());
-      }
+      thisResponses.putIfAbsent(e.getKey(), 0.0);
+      thisResponses.put(e.getKey(), thisResponses.get(e.getKey())
+          + e.getValue());
     }
   }
 
diff --git a/src/main/java/org/torproject/onionoo/docs/NodeStatus.java b/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
index 9080b84..32965dd 100644
--- a/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/NodeStatus.java
@@ -335,11 +335,8 @@ public class NodeStatus extends Document {
       addressesAndPorts.add(address + ":" + dirPort);
     }
     addressesAndPorts.addAll(orAddressesAndPorts);
-    if (this.lastAddresses.containsKey(lastSeenMillis)) {
-      this.lastAddresses.get(lastSeenMillis).addAll(addressesAndPorts);
-    } else {
-      this.lastAddresses.put(lastSeenMillis, addressesAndPorts);
-    }
+    this.lastAddresses.putIfAbsent(lastSeenMillis, new TreeSet<>());
+    this.lastAddresses.get(lastSeenMillis).addAll(addressesAndPorts);
   }
 
   /** Returns the time in milliseconds since the epoch when addresses or
diff --git a/src/main/java/org/torproject/onionoo/server/MostFrequentString.java b/src/main/java/org/torproject/onionoo/server/MostFrequentString.java
index 3d4d4c2..a6b7cb5 100644
--- a/src/main/java/org/torproject/onionoo/server/MostFrequentString.java
+++ b/src/main/java/org/torproject/onionoo/server/MostFrequentString.java
@@ -3,7 +3,6 @@
 
 package org.torproject.onionoo.server;
 
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -17,12 +16,8 @@ class MostFrequentString {
   Map<String, Integer> stringFrequencies = new HashMap<>();
 
   void addString(String string) {
-    if (!this.stringFrequencies.containsKey(string)) {
-      this.stringFrequencies.put(string, 1);
-    } else {
-      this.stringFrequencies.put(string,
-          this.stringFrequencies.get(string) + 1);
-    }
+    this.stringFrequencies.put(string,
+        this.stringFrequencies.getOrDefault(string, 0) + 1);
   }
 
   @Override
@@ -33,12 +28,8 @@ class MostFrequentString {
       return "null (0)";
     }
     for (Map.Entry<String, Integer> e : stringFrequencies.entrySet()) {
-      if (!sortedFrequencies.containsKey(e.getValue())) {
-        sortedFrequencies.put(e.getValue(), new TreeSet<>(
-            Arrays.asList(e.getKey())));
-      } else {
-        sortedFrequencies.get(e.getValue()).add(e.getKey());
-      }
+      sortedFrequencies.putIfAbsent(e.getValue(), new TreeSet<>());
+      sortedFrequencies.get(e.getValue()).add(e.getKey());
     }
     StringBuilder sb = new StringBuilder();
     int stringsToAdd = 3;
diff --git a/src/main/java/org/torproject/onionoo/server/NodeIndexer.java b/src/main/java/org/torproject/onionoo/server/NodeIndexer.java
index 8388f33..80418aa 100644
--- a/src/main/java/org/torproject/onionoo/server/NodeIndexer.java
+++ b/src/main/java/org/torproject/onionoo/server/NodeIndexer.java
@@ -209,10 +209,7 @@ public class NodeIndexer implements ServletContextListener, Runnable {
          * installations in international waters. */
         countryCode = "xz";
       }
-      if (!newRelaysByCountryCode.containsKey(countryCode)) {
-        newRelaysByCountryCode.put(countryCode,
-            new HashSet<>());
-      }
+      newRelaysByCountryCode.putIfAbsent(countryCode, new HashSet<>());
       newRelaysByCountryCode.get(countryCode).add(fingerprint);
       newRelaysByCountryCode.get(countryCode).add(hashedFingerprint);
       String asNumber;
@@ -225,22 +222,16 @@ public class NodeIndexer implements ServletContextListener, Runnable {
          * shouldn't appear in any lookup databases. */
         asNumber = "AS0";
       }
-      if (!newRelaysByAsNumber.containsKey(asNumber)) {
-        newRelaysByAsNumber.put(asNumber, new HashSet<>());
-      }
+      newRelaysByAsNumber.putIfAbsent(asNumber, new HashSet<>());
       newRelaysByAsNumber.get(asNumber).add(fingerprint);
       newRelaysByAsNumber.get(asNumber).add(hashedFingerprint);
       String asName = entry.getAsName();
-      if (!newRelaysByAsName.containsKey(asName)) {
-        newRelaysByAsName.put(asName, new HashSet<>());
-      }
+      newRelaysByAsName.putIfAbsent(asName, new HashSet<>());
       newRelaysByAsName.get(asName).add(fingerprint);
       newRelaysByAsName.get(asName).add(hashedFingerprint);
       for (String flag : entry.getRelayFlags()) {
         String flagLowerCase = flag.toLowerCase();
-        if (!newRelaysByFlag.containsKey(flagLowerCase)) {
-          newRelaysByFlag.put(flagLowerCase, new HashSet<>());
-        }
+        newRelaysByFlag.putIfAbsent(flagLowerCase, new HashSet<>());
         newRelaysByFlag.get(flagLowerCase).add(fingerprint);
         newRelaysByFlag.get(flagLowerCase).add(hashedFingerprint);
       }
@@ -258,42 +249,31 @@ public class NodeIndexer implements ServletContextListener, Runnable {
       int daysSinceFirstSeen = (int) ((
           (specialTime < 0 ? System.currentTimeMillis() : specialTime)
           - entry.getFirstSeenMillis()) / ONE_DAY);
-      if (!newRelaysByFirstSeenDays.containsKey(daysSinceFirstSeen)) {
-        newRelaysByFirstSeenDays.put(daysSinceFirstSeen,
-            new HashSet<>());
-      }
+      newRelaysByFirstSeenDays.putIfAbsent(daysSinceFirstSeen, new HashSet<>());
       newRelaysByFirstSeenDays.get(daysSinceFirstSeen).add(fingerprint);
       newRelaysByFirstSeenDays.get(daysSinceFirstSeen).add(
           hashedFingerprint);
       int daysSinceLastSeen = (int) ((
           (specialTime < 0 ? System.currentTimeMillis() : specialTime)
           - entry.getLastSeenMillis()) / ONE_DAY);
-      if (!newRelaysByLastSeenDays.containsKey(daysSinceLastSeen)) {
-        newRelaysByLastSeenDays.put(daysSinceLastSeen,
-            new HashSet<>());
-      }
+      newRelaysByLastSeenDays.putIfAbsent(daysSinceLastSeen, new HashSet<>());
       newRelaysByLastSeenDays.get(daysSinceLastSeen).add(fingerprint);
       newRelaysByLastSeenDays.get(daysSinceLastSeen).add(
           hashedFingerprint);
       String contact = entry.getContact();
-      if (!newRelaysByContact.containsKey(contact)) {
-        newRelaysByContact.put(contact, new HashSet<>());
-      }
+      newRelaysByContact.putIfAbsent(contact, new HashSet<>());
       newRelaysByContact.get(contact).add(fingerprint);
       newRelaysByContact.get(contact).add(hashedFingerprint);
       String version = entry.getVersion();
       if (null != version) {
-        if (!newRelaysByVersion.containsKey(version)) {
-          newRelaysByVersion.put(version, new HashSet<>());
-        }
+        newRelaysByVersion.putIfAbsent(version, new HashSet<>());
         newRelaysByVersion.get(version).add(fingerprint);
         newRelaysByVersion.get(version).add(hashedFingerprint);
       }
       String operatingSystem = entry.getOperatingSystem();
       if (null != operatingSystem) {
-        if (!newRelaysByOperatingSystem.containsKey(operatingSystem)) {
-          newRelaysByOperatingSystem.put(operatingSystem, new HashSet<>());
-        }
+        newRelaysByOperatingSystem.putIfAbsent(operatingSystem,
+            new HashSet<>());
         newRelaysByOperatingSystem.get(operatingSystem).add(fingerprint);
         newRelaysByOperatingSystem.get(operatingSystem).add(hashedFingerprint);
       }
@@ -308,9 +288,7 @@ public class NodeIndexer implements ServletContextListener, Runnable {
       }
       for (String hostName : allHostNames) {
         String hostNameLowerCase = hostName.toLowerCase();
-        if (!newRelaysByHostName.containsKey(hostNameLowerCase)) {
-          newRelaysByHostName.put(hostNameLowerCase, new HashSet<>());
-        }
+        newRelaysByHostName.putIfAbsent(hostNameLowerCase, new HashSet<>());
         newRelaysByHostName.get(hostNameLowerCase).add(fingerprint);
         newRelaysByHostName.get(hostNameLowerCase).add(hashedFingerprint);
       }
@@ -346,9 +324,7 @@ public class NodeIndexer implements ServletContextListener, Runnable {
           entry);
       for (String flag : entry.getRelayFlags()) {
         String flagLowerCase = flag.toLowerCase();
-        if (!newBridgesByFlag.containsKey(flagLowerCase)) {
-          newBridgesByFlag.put(flagLowerCase, new HashSet<>());
-        }
+        newBridgesByFlag.putIfAbsent(flagLowerCase, new HashSet<>());
         newBridgesByFlag.get(flagLowerCase).add(hashedFingerprint);
         newBridgesByFlag.get(flagLowerCase).add(
             hashedHashedFingerprint);
@@ -356,10 +332,8 @@ public class NodeIndexer implements ServletContextListener, Runnable {
       int daysSinceFirstSeen = (int) ((
           (specialTime < 0 ? System.currentTimeMillis() : specialTime)
           - entry.getFirstSeenMillis()) / ONE_DAY);
-      if (!newBridgesByFirstSeenDays.containsKey(daysSinceFirstSeen)) {
-        newBridgesByFirstSeenDays.put(daysSinceFirstSeen,
-            new HashSet<>());
-      }
+      newBridgesByFirstSeenDays.putIfAbsent(daysSinceFirstSeen,
+          new HashSet<>());
       newBridgesByFirstSeenDays.get(daysSinceFirstSeen).add(
           hashedFingerprint);
       newBridgesByFirstSeenDays.get(daysSinceFirstSeen).add(
@@ -367,27 +341,21 @@ public class NodeIndexer implements ServletContextListener, Runnable {
       int daysSinceLastSeen = (int) ((
           (specialTime < 0 ? System.currentTimeMillis() : specialTime)
           - entry.getLastSeenMillis()) / ONE_DAY);
-      if (!newBridgesByLastSeenDays.containsKey(daysSinceLastSeen)) {
-        newBridgesByLastSeenDays.put(daysSinceLastSeen,
-            new HashSet<>());
-      }
+      newBridgesByLastSeenDays.putIfAbsent(daysSinceLastSeen, new HashSet<>());
       newBridgesByLastSeenDays.get(daysSinceLastSeen).add(
           hashedFingerprint);
       newBridgesByLastSeenDays.get(daysSinceLastSeen).add(
           hashedHashedFingerprint);
       String version = entry.getVersion();
       if (null != version) {
-        if (!newBridgesByVersion.containsKey(version)) {
-          newBridgesByVersion.put(version, new HashSet<>());
-        }
+        newBridgesByVersion.putIfAbsent(version, new HashSet<>());
         newBridgesByVersion.get(version).add(hashedFingerprint);
         newBridgesByVersion.get(version).add(hashedHashedFingerprint);
       }
       String operatingSystem = entry.getOperatingSystem();
       if (null != operatingSystem) {
-        if (!newBridgesByOperatingSystem.containsKey(operatingSystem)) {
-          newBridgesByOperatingSystem.put(operatingSystem, new HashSet<>());
-        }
+        newBridgesByOperatingSystem.putIfAbsent(operatingSystem,
+            new HashSet<>());
         newBridgesByOperatingSystem.get(operatingSystem)
             .add(hashedFingerprint);
         newBridgesByOperatingSystem.get(operatingSystem)
diff --git a/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
index 205e391..e7ccd0b 100644
--- a/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/ClientsStatusUpdater.java
@@ -114,12 +114,8 @@ public class ClientsStatusUpdater implements DescriptorListener,
       ClientsHistory newResponseHistory = new ClientsHistory(
           startMillis, endMillis, totalResponses, responsesByCountry,
           responsesByTransport, responsesByVersion); 
-      if (!this.newResponses.containsKey(hashedFingerprint)) {
-        this.newResponses.put(hashedFingerprint,
-            new TreeSet<>());
-      }
-      this.newResponses.get(hashedFingerprint).add(
-          newResponseHistory);
+      this.newResponses.putIfAbsent(hashedFingerprint, new TreeSet<>());
+      this.newResponses.get(hashedFingerprint).add(newResponseHistory);
     }
   }
 
diff --git a/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java b/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
index 65d342a..afa27a5 100644
--- a/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
+++ b/src/main/java/org/torproject/onionoo/updater/DescriptorSource.java
@@ -81,10 +81,7 @@ public class DescriptorSource {
   /** Registers a descriptor listener for a given descriptor type. */
   public void registerDescriptorListener(DescriptorListener listener,
       DescriptorType descriptorType) {
-    if (!this.descriptorListeners.containsKey(descriptorType)) {
-      this.descriptorListeners.put(descriptorType,
-          new HashSet<>());
-    }
+    this.descriptorListeners.putIfAbsent(descriptorType, new HashSet<>());
     this.descriptorListeners.get(descriptorType).add(listener);
   }
 
diff --git a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
index 1cd989d..9bb4ab7 100644
--- a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
@@ -223,16 +223,11 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
         if (scanMillis < this.now - DateTimeHelper.ONE_DAY) {
           continue;
         }
-        if (!this.exitListEntries.containsKey(fingerprint)) {
-          this.exitListEntries.put(fingerprint, new HashMap<>());
-        }
+        this.exitListEntries.putIfAbsent(fingerprint, new HashMap<>());
         String exitAddress = exitAddressScanMillis.getKey();
-        if (!this.exitListEntries.get(fingerprint).containsKey(
-            exitAddress)
-            || this.exitListEntries.get(fingerprint).get(exitAddress)
+        if (this.exitListEntries.get(fingerprint).getOrDefault(exitAddress, 0L)
             < scanMillis) {
-          this.exitListEntries.get(fingerprint).put(exitAddress,
-              scanMillis);
+          this.exitListEntries.get(fingerprint).put(exitAddress, scanMillis);
         }
       }
     }
@@ -288,14 +283,12 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
         nodeStatus.setVersion(version);
       }
       if (entry.getUnmeasured()) {
-        if (!this.lastSeenUnmeasured.containsKey(fingerprint)
-            || this.lastSeenUnmeasured.get(fingerprint)
+        if (this.lastSeenUnmeasured.getOrDefault(fingerprint, 0L)
             < validAfterMillis) {
           this.lastSeenUnmeasured.put(fingerprint, validAfterMillis);
         }
       } else if (consensus.getConsensusMethod() >= 17) {
-        if (!this.lastSeenMeasured.containsKey(fingerprint)
-            || this.lastSeenMeasured.get(fingerprint)
+        if (this.lastSeenMeasured.getOrDefault(fingerprint, 0L)
             < validAfterMillis) {
           this.lastSeenMeasured.put(fingerprint, validAfterMillis);
         }
@@ -846,8 +839,7 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
             this.exitListEntries.get(fingerprint).entrySet()) {
           String exitAddress = e.getKey();
           long scanMillis = e.getValue();
-          if (!exitAddresses.containsKey(exitAddress)
-              || exitAddresses.get(exitAddress) < scanMillis) {
+          if (exitAddresses.getOrDefault(exitAddress, 0L) < scanMillis) {
             exitAddresses.put(exitAddress, scanMillis);
           }
         }
diff --git a/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
index f1ff574..58cd2fb 100644
--- a/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/UptimeStatusUpdater.java
@@ -103,10 +103,7 @@ public class UptimeStatusUpdater implements DescriptorListener,
     for (NetworkStatusEntry entry :
         consensus.getStatusEntries().values()) {
       String fingerprint = entry.getFingerprint();
-      if (!this.newRunningRelays.containsKey(fingerprint)) {
-        this.newRunningRelays.put(fingerprint,
-            new TreeMap<>());
-      }
+      this.newRunningRelays.putIfAbsent(fingerprint, new TreeMap<>());
       this.newRunningRelays.get(fingerprint).put(dateHourMillis,
           new Flags(entry.getFlags()));
     }
@@ -124,9 +121,7 @@ public class UptimeStatusUpdater implements DescriptorListener,
       long dateHourMillis = (status.getPublishedMillis()
           / DateTimeHelper.ONE_HOUR) * DateTimeHelper.ONE_HOUR;
       for (String fingerprint : fingerprints) {
-        if (!this.newRunningBridges.containsKey(fingerprint)) {
-          this.newRunningBridges.put(fingerprint, new TreeSet<>());
-        }
+        this.newRunningBridges.putIfAbsent(fingerprint, new TreeSet<>());
         this.newRunningBridges.get(fingerprint).add(dateHourMillis);
       }
       this.newBridgeStatuses.add(dateHourMillis);
diff --git a/src/test/java/org/torproject/onionoo/docs/DummyDocumentStore.java b/src/test/java/org/torproject/onionoo/docs/DummyDocumentStore.java
index 3c79235..a8f51ae 100644
--- a/src/test/java/org/torproject/onionoo/docs/DummyDocumentStore.java
+++ b/src/test/java/org/torproject/onionoo/docs/DummyDocumentStore.java
@@ -19,9 +19,7 @@ public class DummyDocumentStore extends DocumentStore {
 
   private <T extends Document> SortedMap<String, Document>
       getStoredDocumentsByClass(Class<T> documentType) {
-    if (!this.storedDocuments.containsKey(documentType)) {
-      this.storedDocuments.put(documentType, new TreeMap<>());
-    }
+    this.storedDocuments.putIfAbsent(documentType, new TreeMap<>());
     return this.storedDocuments.get(documentType);
   }
 
diff --git a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java
index 022381b..a6042b1 100644
--- a/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java
+++ b/src/test/java/org/torproject/onionoo/server/ResourceServletTest.java
@@ -335,10 +335,7 @@ public class ResourceServletTest {
           new HashMap<>();
       for (String parameter : uriParts[1].split("&")) {
         String[] parameterParts = parameter.split("=");
-        if (!parameterLists.containsKey(parameterParts[0])) {
-          parameterLists.put(parameterParts[0],
-              new ArrayList<>());
-        }
+        parameterLists.putIfAbsent(parameterParts[0], new ArrayList<>());
         parameterLists.get(parameterParts[0]).add(parameterParts[1]);
       }
       parameters = new HashMap<>();
diff --git a/src/test/java/org/torproject/onionoo/updater/DummyDescriptorSource.java b/src/test/java/org/torproject/onionoo/updater/DummyDescriptorSource.java
index 22ae477..e31585d 100644
--- a/src/test/java/org/torproject/onionoo/updater/DummyDescriptorSource.java
+++ b/src/test/java/org/torproject/onionoo/updater/DummyDescriptorSource.java
@@ -31,9 +31,7 @@ public class DummyDescriptorSource extends DescriptorSource {
 
   private Set<Descriptor> getDescriptorsByType(
       DescriptorType descriptorType) {
-    if (!this.descriptors.containsKey(descriptorType)) {
-      this.descriptors.put(descriptorType, new HashSet<>());
-    }
+    this.descriptors.putIfAbsent(descriptorType, new HashSet<>());
     return this.descriptors.get(descriptorType);
   }
 
@@ -43,10 +41,7 @@ public class DummyDescriptorSource extends DescriptorSource {
   /** Register a listener to receive descriptors of the demanded type. */
   public void registerDescriptorListener(DescriptorListener listener,
       DescriptorType descriptorType) {
-    if (!this.descriptorListeners.containsKey(descriptorType)) {
-      this.descriptorListeners.put(descriptorType,
-          new HashSet<>());
-    }
+    this.descriptorListeners.putIfAbsent(descriptorType, new HashSet<>());
     this.descriptorListeners.get(descriptorType).add(listener);
   }
 





More information about the tor-commits mailing list