专栏首页10km的专栏java:Set,Map排序输出到Writer

java:Set,Map排序输出到Writer

一般来说java.util.Set,java.util.Map输出的内容的顺序并不是按key的顺序排列的,但是java.util.TreeMap,java.util.TreeSet的实现却可以让Map/Set中元素内容以key的顺序排序,所以利用这个特性,可以将Map/Set转为TreeMap,TreeSet然后实现排序输出。 以下是实现的代码片段:

    /**
     * 对{@link Map}中元素以key排序后,每行以{key}={value}形式输出到{@link Writer}<br>
     * map为空或null时则不向writer写入任何内容
     * @param map
     * @param writer 为null抛出{@link IllegalArgumentException}
     * @throws IOException
     */
    public static  void storeSortedMap(Map<String,String> map,Writer writer)  throws IOException {
        if(null==writer)
            throw new IllegalArgumentException("the arugment 'writer' must not be null ");
        TreeMap<String, String> sortedMap = new TreeMap<String,String>();
        if(null!=map)
            sortedMap.putAll(map);
        BufferedWriter bw=(writer instanceof BufferedWriter)?(BufferedWriter)writer
                : new BufferedWriter(writer);
        for (Entry<String,String> e:sortedMap.entrySet()) {
            bw.write(e.getKey() + "=" + e.getValue());
            bw.newLine();
        }
        bw.flush();
    }
    /**
     * 对 {@link Collection}中元素排序后(去除重复),元素分行输出到{@link Writer}<br>
     * collection为空或null时则不向writer写入任何内容
     * @param collection
     * @param writer 为null抛出{@link IllegalArgumentException}
     * @throws IOException
     */
    public static  void storeSortedSet(Collection<String> collection,Writer writer)  throws IOException {
        if(null==writer)
            throw new IllegalArgumentException("the arugment 'writer' must not be null ");
        TreeSet<String> sortedSet = new TreeSet<String>();
        if(null!=collection)
            sortedSet.addAll(collection);
        BufferedWriter bw=(writer instanceof BufferedWriter)?(BufferedWriter)writer
                : new BufferedWriter(writer);
        for (String e:sortedSet) {          
            bw.write(e);
            bw.newLine();
        }
        bw.flush();
    }

调用示例如下:

Map<String,String> map;
//....
storeSortedMap(map,new FileWriter(new File("c:\\id.txt")));
Set<String,String> set;
//....
storeSortedSet(set,new FileWriter(new File("c:\\trainval.txt")));

生成结果已经是排序的了

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • commons-configuration2:properties文件写入中文(no escape)

    properties 是java标准支持的配置文件格式,默认编码ISO 8859-1,unicode字符会被转义(Unicode escapes) 参见 ht...

    用户1148648
  • WindowBuilder:Anonymous class creation can not be evaluated.

    版权声明:本文为博主原创文章,转载请注明源地址。 https://blog.csdn.net...

    用户1148648
  • cmake: 使用jom实现msvc工程并发编译提高速度(-j)

    msvc提供的nmake并没有并发编译功能(类似gcc make的-j参数指定并发编译的任务数), 而第三方工具jom(http://wiki.qt.io/...

    用户1148648
  • java读写file

    private static String encoding = "utf-8"; public static void readTxt(Strin...

    Ryan-Miao
  • 看Ribbon源码增值的Archaius源码分析

    可以看输出结果,可以看到SampleBean的name属性已经发生变更了。name属性从Sample Bean变更到A Coffee Bean from Gau...

    用户2032165
  • SpringBoot代码片段,方便自己查看[持续添加]

    或者参考:https://www.cnblogs.com/nuccch/p/8435693.html 官网:https://www.jython.org/do...

    小锋学长
  • 仿比心源码,保存图片到系统相册

    yunbaokeji柯基
  • java实现多个网络文件批量下载并压缩

    文档管理模块,列表中显示的记录的每日文件上传保存的记录.每条数据中有一个字段存放了文件的存储地址文件服务器上

    java攻城狮
  • aspose-words java word 转pdf

    和谐版jar包 加激活 去除水印 转换从此无限制 就算是在服务器上也不需要安装其他工具 目前最好 使用 方便快捷 jar包下载地址 链接: https://pa...

    崔笑颜
  • Java中实现顺序IO

    对于磁盘的读写分为两种模式,顺序IO和随机IO。 随机IO存在一个寻址的过程,所以效率比较低。而顺序IO,相当于有一个物理索引,在读取的时候不需要寻找地址,效率...

    付威

扫码关注云+社区

领取腾讯云代金券