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

相关文章

来自专栏糊一笑

Immutable日常操作之深入API

写在前面 本文只是个人在熟悉Immutable.js的一些个人笔记,因此我只根据我自己的情况来熟悉API,所以很多API并没有被列举到,比如常规的push/ma...

43590
来自专栏java学习

来测试一下你对数据结构中的栈和队列的了解有多少?

选择题 1.向一个栈顶指针为top的链栈中插入一个结点s,执行( )。 A.top.next=s; B.s.next=top.next ;top.next=s;...

65090
来自专栏小勇DW3

Spring中使用RedisTemplate操作Redis(spring-data-redis)

Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串)、List(列表)、Set(集合)、Hash(散列)和 Zs...

7.6K50
来自专栏编程之旅

数据结构——二叉查找树(C语言)

二叉查找树,也称作二叉搜索树,有序二叉树,排序二叉树,而当一棵空树或者具有下列性质的二叉树,就可以被定义为二叉查找树:

23140
来自专栏郭耀华‘s Blog

LeetCode第六天

第六天 30.(219) Contains Duplicate II ? JAVA class Solution { public boolean co...

29570
来自专栏Petrichor的专栏

python: 二叉树 & 七种遍历

31440
来自专栏Java3y

TreeMap就这么简单【源码剖析】

24350
来自专栏小灰灰

JDK容器学习之TreeMap (一) : 底层数据结构

TreeMap 在日常的工作中,相比较与HashMap而言,TreeMap的使用会少很多,即使在某些场景,需要使用到排序的Map时,也更多的是选择 Linke...

27090
来自专栏Bingo的深度学习杂货店

Q101 Symmetric Tree

Given a binary tree, check whether it is a mirror of itself (ie, symmetric aroun...

33980
来自专栏xiaoxi666的专栏

【模板小程序】任意长度非负十进制数转化为二进制(java实现)

25340

扫码关注云+社区

领取腾讯云代金券