java - 如何使用 Collectors toMap() 返回单个值?
问题描述
我试图让 Collectors toMap() 从一组标题中返回单个值。例如:输入字符串
[客户端:MYSQL,EDW,Oracle,WSO2,SMTP,唯一名称:Domain_v1]
代码:
private static Map<String, Object> headersTomap(String headers) {
String sHeaders = headers.replace("[", ""); sHeaders = sHeaders.replace("]",
""); logger.debug("sHeaders: " + sHeaders); return
Arrays.stream(sHeaders.split(", ")).map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
}
上面的代码返回:
clients: MYSQL,EDW,Oracle,WSO2,SMTP
UniqueName: Domain_v1
预期输出为:Domain_v1
请指教。上述代码应返回 Domain_v1 作为上述输入的输出。请帮忙。谢谢你。
解决方案
由于您已经将 string 转换为,因此您可以使用getOrDefaultMap
获取 key 的值UniqueName
返回指定键映射到的值,如果此映射不包含该键的映射,则返回 defaultValue。
Map<String,String> map = Arrays.stream(sHeaders.split(", ")).map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0], s -> s[1]));
map.getOrDefault("UniqueName","Not Present");
或者在一个序列中
Arrays.stream(sHeaders.split(", ")).map(s -> s.split(":"))
.collect(Collectors.toMap(s -> s[0], s -> s[1]))
.getOrDefault("UniqueName","Not Present");
如果您只需要与UniqueName
没有关联的值,Map
那么您可以简单地采用这种方法
String res = Arrays.stream(sHeaders.split(", "))
.filter(s->s.contains("UniqueName:"))
.findFirst()
.map(name->name.split(":")[1])
.orElse("Not Present");
推荐阅读
- python - BeautifulSoup 网页抓取
- c++ - C++11 可变类处理程序管理器
- php - 将文件从本地文件系统上传到 php 服务器的问题
- python - Boto3 EC2.Client DescribeFleets 类错误“EC2”对象没有属性“describe_fleets”
- javascript - 无法在猫鼬中填充文章
- javascript - 是否可以在 React 中的功能组件内触发事件时打开另一个功能组件?
- mysql - Mysql合并两个varchar列删除重复词
- sql - 将现有数据附加到具有标识的表中
- angular - Bootstrap 4:TypeError:无法设置未定义错误的属性“emulateTransitionEnd”
- android - 在 Appwidget RemoteViews 中,用户强制停止应用程序后未调用 setOnClickPendingIntent