繁体   English   中英

映射值通过流收集到字符串

[英]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表示的转换。 所有其他部分仍然有效。

更新2:

答案已更新以满足更新的期望。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM