- Multimap<String, String> - Multimap<String, String> . , removeAll(parameter) , . - raw String, , .
Here is the code for this:
private static final Splitter QUERY_SPLITTER = Splitter.on(CharMatcher.anyOf("&;"));
private static final Joiner QUERY_JOINER = Joiner.on('&');
private static final EntrySplitFunction ENTRY_SPLITTER =
new EntrySplitFunction(Splitter.on('='));
private static final EntryJoinFunction ENTRY_JOINER =
new EntryJoinFunction(Joiner.on('=').useForNull(""));
public static Multimap<String, String> parseQueryString(String queryString) {
Multimap<String, String> result = HashMultimap.create();
Iterable<String> entryStrings = QUERY_SPLITTER.split(queryString);
for (Map.Entry<String, String> entry : transform(entryStrings, ENTRY_SPLITTER)) {
result.put(entry.getKey(), entry.getValue());
}
return result;
}
public static String toQueryString(Multimap<String, String> multimap) {
return QUERY_JOINER.join(transform(multimap.entries(), ENTRY_JOINER));
}
private static class EntrySplitFunction
implements Function<String, Map.Entry<String, String>> {
private final Splitter keyValueSplitter;
private EntrySplitFunction(Splitter keyValueSplitter) {
this.keyValueSplitter = keyValueSplitter;
}
@Override public Map.Entry<String, String> apply(String input) {
Iterator<String> keyAndValue = keyValueSplitter.split(input).iterator();
return Maps.immutableEntry(keyAndValue.next(), keyAndValue.next());
}
}
private static class EntryJoinFunction
implements Function<Map.Entry<String, String>, String> {
private final Joiner keyValueJoiner;
private EntryJoinFunction(Joiner keyValueJoiner) {
this.keyValueJoiner = keyValueJoiner;
}
@Override public String apply(Map.Entry<String, String> input) {
return keyValueJoiner.join(input.getKey(), input.getValue());
}
}
Moreover, all you need to do to implement your method is:
public static String removeParameters(String queryString, String... parameters) {
Multimap<String, String> query = parseQueryString(queryString);
for (String parameter : parameters) {
query.removeAll(parameter);
}
return toQueryString(query);
}
Even better, assuming that you are doing something else with the request, you will only Multimaphave it when you achieve what you need to do, and you don’t even bother to write a special method for it.
source
share