java - 列表到地图带流,带字符串拆分
问题描述
我有字符串列表:
List<String> cookiesUpdate = Arrays.asList("A=2" , "B=3");
我想将其转换为地图:
{
"A": "2",
"B": "3"
}
代码:
Map<String, String> cookies = cookiesUpdate.stream()
.collect(Collectors.toMap(String::toString, String::toString));
如何编写上面的那些拆分器?如果编译器认为键字符串是对象。
.split("=")[0];
.split("=")[1];
解决方案
- 拆分应该由
"="
(或"\\s*=\\s"
排除周围的空格=
)完成
更新另外最好在第一次出现时提供拆分limit
参数,感谢@AndrewF 的建议!String::split
"="
- 修复
toMap
收集器使用数组的第一个元素作为键,最后一个作为值;如果可能有多个同名 cookie,则可能需要合并功能
Map<String, String> map = cookies.stream()
.map(ck -> ck.split("\\s*=\\s*", 2)) // Stream<String[]>
.filter(arr -> arr.length > 1) // ignore invalid cookies
.collect(Collectors.toMap(arr -> arr[0], arr -> arr[1], (v1, v2) -> v1));
如果有多个具有相同名称的 cookie,则可能值得将它们收集起来,Set<String>
从而保留所有唯一值。为此,Collectors.groupingBy
并且Collectors.mapping
:
Map<String, Set<String>> map2 = cookies.stream()
.map(ck -> ck.split("\\s*=\\s*", 2)) // Stream<String[]>
.filter(arr -> arr.length > 1) // ignore invalid cookies
.collect(Collectors.groupingBy(
arr -> arr[0],
Collectors.mapping(arr -> arr[1], Collectors.toSet())
));
推荐阅读
- google-cloud-platform - SonarQube 与 GCP 云构建的集成
- node.js - NPM 和 hubspot CMS/CLI 集成
- if-statement - 脚本编辑器中的多个条件问题
- python - 在熊猫中将名称设置为未命名索引
- reactjs - 使用 React-router-dom 时更改主页上的 NavBar
- c++ - 为什么在重载 = 运算符时按引用返回?
- angular - 当我里面至少有一个元素时,如何设置 formControl 有效?
- ios - React Native App 崩溃(线程 1:EXC_BAD_ACCESS(代码=1,地址=0x54))
- c# - 扩展 TextBox 可防止 ValidationRule 错误工具提示出现 WPF
- c# - 我如何设置最大值。现有预制件的数量,并且在玩家通过它们后还会在 Unity 中消失预制件地板?