[英]Map values collect to string with streams
我为HashMap
字段实现了toString
,如下所示:
public class Bar {
private HashMap<String, Foo> m = null; // Foo is a class with defined toString method
@Override
public String toString() {
String eol = System.getProperty("line.separator");
final String[] ret = {""};
m.forEach( (k,v) -> ret[0] += v + eol);
return ret[0];
}
}
如何用Java 8流实现此功能? 以下是尝试失败的示例(仅出于说明目的)
m.values().stream().collect(Collectors.joining()).
m.entrySet().stream().collect(Collectors.joining()).toString();
您可以使用.map
函数将每个Map.Entry
集转换为String
表示形式。 使用.map
函数,您可以专注于输出的每一行的外观,然后可以通过.collect(Collectors.joining(eol))
调用来创建结果。 在下面,您可以找到产生所需输出的示例:
@Override
public String toString() {
final String eol = System.getProperty("line.separator");
return m.values()
.stream()
.map(Foo::toString)
.collect(Collectors.joining(eol));
}
示例输出:
[foo:something1]
[foo:something2]
[foo:something3]
好像您已更改所需的输出。 无论如何,整个想法是在.map()
中提供一个函数,该函数执行从Foo
对象到其String
表示的转换。 所有其他部分仍然有效。
答案已更新以满足更新的期望。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.