映射<S,S> 到列表<S>
Map<S,S> to List<S>
我正在尝试使用 lambda 将 Map<String, String>
转换为 List<String>
。
本质上,我想将键和值与中间的 '='
连接起来。这看起来微不足道,但我找不到如何去做。
例如
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;
首先,如果需求只是使用 Lambda,您可以将普通代码放入函数中并调用它:
Function<Map<S,S>,List<S>> function = (Map<S,S> map) -> {
// conventional Java code
return result;
};
List<S> list = function.apply(inputMap);
你的意思大概是想使用Java8的流库。流总是由流源,然后是一些中间操作,最后是构造计算结果的最终操作组成。
在你的例子中,流源是映射的条目集,中间操作将每个条目转换为字符串,最后最后的操作将这些字符串收集到一个列表中。
List<S> list =
map.entrySet().stream()
.map(e -> e.getKey().toString() +
"=" + e.getValue().toString())
.collect(Collectors.toList());
对于java 7,你也可以一行完成,从Map#toString()
:
开始
List<String> list = Arrays.asList(map.toString().replaceAll("^.|.$", "").split(", "));
但它容易受到 keys/values 包含逗号的攻击。
在java8中,在入口流上使用Map.Entry#toString()
:
List<String> list = map.entrySet().stream().map(Object::toString).collect(Collectors.toList());
不易受逗号的影响。
两种解决方案都使用了 Map.Entry#toString()
returns "key=value".
我正在尝试使用 lambda 将 Map<String, String>
转换为 List<String>
。
本质上,我想将键和值与中间的 '='
连接起来。这看起来微不足道,但我找不到如何去做。
例如
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;
首先,如果需求只是使用 Lambda,您可以将普通代码放入函数中并调用它:
Function<Map<S,S>,List<S>> function = (Map<S,S> map) -> {
// conventional Java code
return result;
};
List<S> list = function.apply(inputMap);
你的意思大概是想使用Java8的流库。流总是由流源,然后是一些中间操作,最后是构造计算结果的最终操作组成。
在你的例子中,流源是映射的条目集,中间操作将每个条目转换为字符串,最后最后的操作将这些字符串收集到一个列表中。
List<S> list =
map.entrySet().stream()
.map(e -> e.getKey().toString() +
"=" + e.getValue().toString())
.collect(Collectors.toList());
对于java 7,你也可以一行完成,从Map#toString()
:
List<String> list = Arrays.asList(map.toString().replaceAll("^.|.$", "").split(", "));
但它容易受到 keys/values 包含逗号的攻击。
在java8中,在入口流上使用Map.Entry#toString()
:
List<String> list = map.entrySet().stream().map(Object::toString).collect(Collectors.toList());
不易受逗号的影响。
两种解决方案都使用了 Map.Entry#toString()
returns "key=value".