映射到List

我正在尝试使用lambdas将Map转换为List

基本上我想将键和值连接起来,并在它们之间加上'=' 。 这似乎微不足道,但我找不到如何做到这一点。

例如

 Map 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 result; 

对于java 7,你也可以从一行开始,从Map#toString()

 List list = Arrays.asList(map.toString().replaceAll("^.|.$", "").split(", ")); 

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

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

 List list = map.entrySet().stream().map(Object::toString).collect(Collectors.toList()); 

这不容易受到逗号的影响。

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

首先,如果要求只是使用Lambda,您可以将普通代码放入函数中并调用它:

 Function,List> function = (Map map) -> { // conventional Java code return result; }; List list = function.apply(inputMap); 

您的意思可能是您想要使用Java 8的流库。 流总是由流源,然后是一些中间操作组成,最后是构成计算结果的最终操作。

在您的情况下,流源是映射的条目集,中间操作将每个条目转换为字符串,最后最终操作将这些字符串收集到列表中。

 List list = map.entrySet().stream() .map(e -> e.getKey().toString() + "=" + e.getValue().toString()) .collect(Collectors.toList());