首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Map<S,S>到List<S>

Map<S,S>到List<S>
EN

Stack Overflow用户
提问于 2015-05-10 05:13:45
回答 2查看 277关注 0票数 5

我正在尝试使用lambda将Map<String, String>转换为List<String>

本质上,我想将键和值与中间的'='连接起来。这看起来很琐碎,但我找不到该怎么做。

例如。

代码语言:javascript
复制
Map<String, String> map = new HashMap<>();
map.put("a1","b1");
map.put("a2","b2");
map.put("a3","b3");

// Lambda

// Result contains ["a1=b1", "a2=b2", "a3=b3"]
List<String> result;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-10 07:30:00

对于java 7,也可以在一行中完成,从Map#toString()开始。

代码语言:javascript
复制
List<String> list = Arrays.asList(map.toString().replaceAll("^.|.$", "").split(", "));

但是它容易受到包含逗号的键/值的影响。

在java 8中,在条目流上使用Map.Entry#toString()

代码语言:javascript
复制
List<String> list = map.entrySet().stream().map(Object::toString).collect(Collectors.toList());

不容易受到逗号的攻击。

这两种解决方案都使用了Map.Entry#toString()返回"key=value“这一事实。

票数 7
EN

Stack Overflow用户

发布于 2015-05-10 06:08:55

首先,如果需求只是使用Lambda,则只需将普通代码放入函数并调用它:

代码语言:javascript
复制
Function<Map<S,S>,List<S>> function = (Map<S,S> map) -> {
    // conventional Java code
    return result;
};
List<S> list = function.apply(inputMap); 

您的意思可能是您希望使用Java 8的流库。流总是由一个流源组成,然后是一些中间操作,最后是一个最后的操作,它构造了计算的结果。

在您的示例中,流源是映射的入口集,中间操作将每个条目转换为字符串,最后最后的操作将这些字符串收集到一个列表中。

代码语言:javascript
复制
List<S> list = 
    map.entrySet().stream()
       .map(e -> e.getKey().toString() + 
            "=" + e.getValue().toString())
       .collect(Collectors.toList());
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30147975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档