From ea1f60dbf06cf7ab8618afff74e55dec344c3620 Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Wed, 18 May 2016 18:07:53 +0900 Subject: [PATCH] Replace DomainNameMapping.entries() with asMap() Motivation: DomainNameMapping.entries() returns Set>, which doesn't sound very natural. Modifications: Replace entries() with asMap() which returns a Map instead. Result: - Better looking API - User can do a lookup because it's a Map --- .../io/netty/util/DomainMappingBuilder.java | 25 ++++++++++--------- .../java/io/netty/util/DomainNameMapping.java | 4 +-- .../io/netty/util/DomainNameMappingTest.java | 19 +++++--------- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/common/src/main/java/io/netty/util/DomainMappingBuilder.java b/common/src/main/java/io/netty/util/DomainMappingBuilder.java index 4d49745671..de7f36686c 100644 --- a/common/src/main/java/io/netty/util/DomainMappingBuilder.java +++ b/common/src/main/java/io/netty/util/DomainMappingBuilder.java @@ -17,7 +17,6 @@ package io.netty.util; import java.util.Collections; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -53,7 +52,7 @@ public final class DomainMappingBuilder { */ public DomainMappingBuilder(int initialCapacity, V defaultValue) { this.defaultValue = checkNotNull(defaultValue, "defaultValue"); - this.map = new LinkedHashMap(initialCapacity); + map = new LinkedHashMap(initialCapacity); } /** @@ -80,7 +79,7 @@ public final class DomainMappingBuilder { * @return new {@link DomainNameMapping} instance */ public DomainNameMapping build() { - return new ImmutableDomainNameMapping(this.defaultValue, this.map); + return new ImmutableDomainNameMapping(defaultValue, map); } /** @@ -98,6 +97,7 @@ public final class DomainMappingBuilder { private final String[] domainNamePatterns; private final V[] values; + private final Map map; @SuppressWarnings("unchecked") private ImmutableDomainNameMapping(V defaultValue, Map map) { @@ -108,12 +108,18 @@ public final class DomainMappingBuilder { domainNamePatterns = new String[numberOfMappings]; values = (V[]) new Object[numberOfMappings]; + final Map mapCopy = new LinkedHashMap(map.size()); int index = 0; for (Map.Entry mapping : mappings) { - domainNamePatterns[index] = normalizeHostname(mapping.getKey()); - values[index] = mapping.getValue(); + final String hostname = normalizeHostname(mapping.getKey()); + final V value = mapping.getValue(); + domainNamePatterns[index] = hostname; + values[index] = value; + mapCopy.put(hostname, value); ++index; } + + this.map = Collections.unmodifiableMap(mapCopy); } @Override @@ -140,13 +146,8 @@ public final class DomainMappingBuilder { } @Override - public Set> entries() { - int length = domainNamePatterns.length; - Map map = new HashMap(length); - for (int index = 0; index < length; ++index) { - map.put(domainNamePatterns[index], values[index]); - } - return Collections.unmodifiableSet(map.entrySet()); + public Map asMap() { + return map; } @Override diff --git a/common/src/main/java/io/netty/util/DomainNameMapping.java b/common/src/main/java/io/netty/util/DomainNameMapping.java index f31da8643c..610446563c 100644 --- a/common/src/main/java/io/netty/util/DomainNameMapping.java +++ b/common/src/main/java/io/netty/util/DomainNameMapping.java @@ -137,8 +137,8 @@ public class DomainNameMapping implements Mapping { /** * Returns a read-only {@link Set} of the domain mapping patterns and their associated value objects. */ - public Set> entries() { - return Collections.unmodifiableSet(map.entrySet()); + public Map asMap() { + return Collections.unmodifiableMap(map); } @Override diff --git a/common/src/test/java/io/netty/util/DomainNameMappingTest.java b/common/src/test/java/io/netty/util/DomainNameMappingTest.java index 606d6fca68..7fdbf96ba8 100644 --- a/common/src/test/java/io/netty/util/DomainNameMappingTest.java +++ b/common/src/test/java/io/netty/util/DomainNameMappingTest.java @@ -16,11 +16,10 @@ package io.netty.util; -import java.util.HashMap; -import java.util.Map; - import org.junit.Test; +import java.util.Map; + import static org.junit.Assert.assertEquals; @SuppressWarnings("deprecation") @@ -186,15 +185,12 @@ public class DomainNameMappingTest { } @Test - public void testEntries() { + public void testAsMap() { DomainNameMapping mapping = new DomainNameMapping("NotFound") .add("netty.io", "Netty") .add("downloads.netty.io", "Netty-Downloads"); - Map entries = new HashMap(); - for (Map.Entry entry: mapping.entries()) { - entries.put(entry.getKey(), entry.getValue()); - } + Map entries = mapping.asMap(); assertEquals(2, entries.size()); assertEquals("Netty", entries.get("netty.io")); @@ -202,16 +198,13 @@ public class DomainNameMappingTest { } @Test - public void testEntriesWithImmutableDomainNameMapping() { + public void testAsMapWithImmutableDomainNameMapping() { DomainNameMapping mapping = new DomainMappingBuilder("NotFound") .add("netty.io", "Netty") .add("downloads.netty.io", "Netty-Downloads") .build(); - Map entries = new HashMap(); - for (Map.Entry entry: mapping.entries()) { - entries.put(entry.getKey(), entry.getValue()); - } + Map entries = mapping.asMap(); assertEquals(2, entries.size()); assertEquals("Netty", entries.get("netty.io"));