我为toString
字段实施了HashMap
,如下所示:
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();
答案 0 :(得分:3)
您可以使用.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
表示的转换。所有其他部分仍然有效。
更新答案以满足更新的期望。