首页 > 解决方案 > 如何使用 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 作为上述输入的输出。请帮忙。谢谢你。

标签: java

解决方案


由于您已经将 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");

推荐阅读