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 条评论
登录 后参与评论

相关文章

来自专栏Play & Scala 技术分享

Java字符串处理技巧

2705
来自专栏Java 技术分享

Java 基础 -- 泛型、集合、IO、反射

3379
来自专栏移动开发面面观

HashTable,HashMap与ConcurrentHashMap源码分析

1155
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列13

一、说出一些常用的类,包,接口,请各举5个 常用的类:BufferedReader BufferedWriter FileReader FileWirter ...

2603
来自专栏老马说编程

(50) 剖析EnumMap / 计算机程序的思维逻辑

查看历史文章,请点击上方链接关注公众号。 上节我们提到,如果需要一个Map的实现类,并且键的类型为枚举类型,可以使用HashMap,但应该使用一个专门的实现类E...

1808
来自专栏有趣的Python

慕课网-C++远征之多态篇(中)-学习笔记

c++远征之多态篇 纯虚函数 & 抽象类 例子: class Shape { public: virtual double calcArea()//虚函...

3014
来自专栏Java爬坑系列

【JAVA零基础入门系列】Day15 对象的比较

  最近一直有事,博客也停笔了一段时间,十分抱歉。   这一篇主要讲讲对象的比较,什么是对象的比较,我们知道两个数值类型只需要用“==”符号即可进行相等判断,但...

1946
来自专栏

Cassandra API60 Java 代码示例

文档地址 http://wiki.apache.org/cassandra/API06,实现了绝大部分示例

1424
来自专栏java一日一条

Java中的HashMap和HashTable到底哪不同?

HashMap和HashTable有什么不同?在面试和被面试的过程中,我问过也被问过这个问题,也见过了不少回答,今天决定写一写自己心目中的理想答案。

472
来自专栏Java爬坑系列

【Java入门提高篇】Day13 Java中的反射机制

  前一段时间一直忙,所以没什么时间写博客,拖了这么久,也该更新更新了。最近看到各种知识付费的推出,感觉是好事,也是坏事,好事是对知识沉淀的认可与推动,坏事是感...

3519

扫码关注云+社区