首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化对象列表的fasterxml ObjectMapper

优化对象列表的fasterxml ObjectMapper
EN

Stack Overflow用户
提问于 2018-11-02 14:45:12
回答 2查看 406关注 0票数 3

我想为列表优化ObjectMapper。要求是我需要在列表的每个元素后面添加一个分隔符。我当前的代码如下所示:

代码语言:javascript
复制
    StringBuilder strBuilder = new StringBuilder();
    for (Event event : segregatedList) {
        String eventJson = mapper.writeValueAsString(event);
        strBuilder.append("\n");
        strBuilder.append(eventJson);

    }

这对于一个很长的列表(大约10000个事件)来说需要大量的时间,.How我可以优化代码来在一次go中序列化列表吗?

EN

回答 2

Stack Overflow用户

发布于 2018-11-02 15:13:36

映射器实例是线程安全的,因此您可以将mapper.writeValueAsString拆分为并行作业。我想,如果您不担心它们的附加顺序,这样的东西可能会有所帮助!

代码语言:javascript
复制
segregatedList.parallelStream().map(event -> mapper.writeValueAsString(event)).collect(Collectors.joining("\n")))

否则,我可以在这里看到非常小的改进范围。也许您可以通过忽略Dark Knight中提到的属性来优化json

票数 1
EN

Stack Overflow用户

发布于 2018-11-02 15:04:08

在java中,有多种方法可以连接字符串。

java.lang.String

  • Using +operator

  • 中使用java.lang.String

  • Using StringBuilder

的concat()方法

根据我个人的分析,我可以说字符串上的+调用被转换成了新的StringBuilder().append( "" )。由于StringBuilder(字符串)构造函数分配了一个包含16个字符的缓冲区,因此追加超过16个字符将需要重新分配缓冲区。最后,StringBuffer.toString()调用使用StringBuilder缓冲区的副本创建一个新的String对象。

所以,如果你不想要同步开销,我建议你在这里使用StringBufferStringBuilder是最好的。我看到您已经在使用StringBuilder了,所以这里几乎没有改进的余地。但是,您可以通过忽略无用的属性来优化生成的json。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53113801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档