【问题标题】:convert map to string using java 8 lambda [duplicate]使用java 8 lambda将映射转换为字符串[重复]
【发布时间】:2017-09-26 21:29:09
【问题描述】:

我想将映射 {key:column, key1:column1} 转换为 csv 字符串“key=column,key1=column”。

我正在获取入口映射并根据键和值构造字符串。这是我所拥有的:

        entry.forEach(entryVal ->{
            result.append(entryVal.getKey() + "=" + entryVal.getValue());
            result.append(',');
        });
        int index = result.lastIndexOf(",");
        if(index == result.length()-1){
            result.deleteCharAt(index);
            return result.toString();
        }

当然,看起来很难看,尤其是我必须对逗号进行后处理。 想知道是否有更清洁的方法来做到这一点?

注意:我不需要代码审查,只要可能的话,我只需要知道一种不同但更简洁的方式来编写相同的东西

【问题讨论】:

    标签: java lambda java-8


    【解决方案1】:

    这可以使用joining 收集器来完成:

    String str = map.entrySet().stream().map(e -> e.getKey() + "=" + e.getValue())
                                        .collect(Collectors.joining(","));
    

    【讨论】:

      【解决方案2】:

      不要过度复杂化:

      String str = map.toString().replace(":", "=").replaceAll("^.|.$", "");
      

      【讨论】:

      • .replaceAll(",","\n");
      • @acpuma 接受的答案,和我的一样,用逗号分隔,这是 OP 要求的
      • 此解决方案取决于地图的 toString() 输出的确切格式,这不是地图接口规范的保证部分
      • @MichaelLucas toString() 的实现自 25 年前的第一个 java 版本以来没有改变。我愿意赌一大笔钱,它永远不会改变。但即便如此,您的单元测试也会发现任何此类问题。
      • @Bohemian 因为 Map 是一个接口,它没有任何保证 toString() 实现。您可能是对的,HashMap 的 toString() 不太可能改变,但无论实现如何,代码都应该可靠地工作。请注意,Java 的第一个版本根本不包括 Map 或 HashMap(那是 Vectors 和 Hashtables 的时代)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 2014-09-16
      • 2017-01-30
      相关资源
      最近更新 更多