parse uri params as multi list

Daniel Gultsch created

Change summary

src/main/java/de/gultsch/common/MiniUri.java | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)

Detailed changes

src/main/java/de/gultsch/common/MiniUri.java 🔗

@@ -5,9 +5,10 @@ import androidx.annotation.NonNull;
 import com.google.common.base.MoreObjects;
 import com.google.common.base.Splitter;
 import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
 import java.io.UnsupportedEncodingException;
 import java.net.URLDecoder;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -21,7 +22,7 @@ public class MiniUri {
     private final String scheme;
     private final String authority;
     private final String path;
-    private final Map<String, String> parameter;
+    private final Map<String, Collection<String>> parameter;
 
     public MiniUri(final String uri) {
         this.raw = uri;
@@ -63,8 +64,9 @@ public class MiniUri {
         };
     }
 
-    private static Map<String, String> parseParameters(final String query, final char separator) {
-        final ImmutableMap.Builder<String, String> builder = new ImmutableMap.Builder<>();
+    private static Map<String, Collection<String>> parseParameters(
+            final String query, final char separator) {
+        final var builder = new ImmutableMultimap.Builder<String, String>();
         for (final String pair : Splitter.on(separator).split(query)) {
             final String[] parts = pair.split("=", 2);
             if (parts.length == 0) {
@@ -81,7 +83,7 @@ public class MiniUri {
                 builder.put(key, EMPTY_STRING);
             }
         }
-        return builder.build();
+        return builder.build().asMap();
     }
 
     @NonNull
@@ -123,7 +125,7 @@ public class MiniUri {
         return Uri.parse(this.raw);
     }
 
-    public Map<String, String> getParameter() {
+    public Map<String, Collection<String>> getParameter() {
         return this.parameter;
     }
 }