java - 将字符串拆分为键和值以构建 Map
问题描述
我有以下字符串:
utm_campaign=some_campaign&utm_content=video&utm_medium=paidsocial&utm_source=facebook"
我想将其拆分为键/值并将其放入 HashMap:
KEY: utm_campaign VALUE: some_campaign
...
etc
另外,在将其放入 Map 之前,我应该在此方法中将 utm 替换为 ga:
private String convertUtmToGa(String utm) {
switch (utm) {
case "utm_medium":
return "ga:medium";
case "utm_campaign":
return "ga:campaign";
case "utm_source":
return "ga:source";
case "utm_content":
return "ga:adContent";
default:
return utm;
}
}
所以我应该得到这样的地图:
ga:campaign=some_campaign, ga:adContent=video, ga:medium=paidsocial
我试过:
private Map<String, String> extractUtmMarks(String paramsString) {
if (paramsString != null) {
Map<String, String> params = new HashMap<>();
String[] paramsAndValues = paramsString.split("&");
for (String paramAndValue : paramsAndValues) {
String[] keyValueArray = paramAndValue.split("=");
if (keyValueArray.length == 2 && !keyValueArray[1].isBlank() && !isUtmMarkContainsMacro(keyValueArray[1])) {
String param = convertUtmMarkToGa(keyValueArray[0]);
if (!param.isBlank()) {
params.put(param, keyValueArray[1]);
}
}
}
return params;
}
return Collections.emptyMap();
}
但是这段代码看起来不太好。我能得到更好的解决方案吗?
解决方案
使用流...
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
...
final String input = "utm_campaign=some_campaign&utm_content=video&utm_medium=paidsocial&utm_source=facebook";
final Map<String, String> map =
Arrays.stream(input.split("&")) // Stream of "K=V" strings
.map(subString -> subString.split("=")) // Returns 2 element array -- {K,V}
.collect(Collectors.toMap(tokens -> convertUtmToGa(tokens[0]), tokens -> tokens[1]));
推荐阅读
- axios - 使用 jest 和 testing-library 在 react 组件中测试多个 axios 调用
- linux - 有什么方法可以将不同 webapps 的多个端口传递给单个 ip/域子页面
- c - 鼠标随 SendInput 飘走
- javascript - 如何在 JS 中从没有元素名称的 json 文件中读取特定数据
- arrays - 如果元素的索引等于数组的元素值,则将 elemnet 交换到下一个元素
- php - 如何在 HTML / PHP 中使用 "?main="
- http - 用户不存在时的响应代码 - 404 还是 422?
- mongodb - 更新对象 mongodb 数组中的项目
- oracle - 如何在 Talend 中将 varchar 数据类型转换为 Cassandra Map(键值对)转换
- css - 如何在 RSCSS 中选择什么是组件和什么是元素?