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

相关文章

来自专栏小灰灰

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

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

2179
来自专栏Golang语言社区

【Go 语言社区】Golang中interface判断nil问题

在示例中,我们定义一个interface名为Stringer,同时定义一个符合其定义的Binary类型: type Stringer interface { ...

45018
来自专栏小勇DW3

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

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

6443
来自专栏小樱的经验随笔

51 Nod 1008 N的阶乘 mod P【Java大数乱搞】

1008 N的阶乘 mod P 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 输入N和P(P为质数),求N! Mod P ...

2656
来自专栏Pythonista

Golang之Struct(二叉树定义)

662
来自专栏Android知识点总结

Java总结之容器家族--Collection

Set的操作比较少,基本上也就是Collection传下来的方法 Set一般基于Map来实现:HashSet、LinkedHashSet、TreeSet的特性...

1122
来自专栏编程之旅

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

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

1204
来自专栏恰同学骚年

数据结构基础温故-4.树与二叉树(中)

在上一篇中,我们了解了树的基本概念以及二叉树的基本特点和代码实现,还用递归的方式对二叉树的三种遍历算法进行了代码实现。但是,由于递归需要系统堆栈,所以空间消耗要...

931
来自专栏郭耀华‘s Blog

LeetCode第六天

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

2757
来自专栏码匠的流水账

聊聊storm nimbus的mkAssignments

storm-2.0.0/storm-server/src/main/java/org/apache/storm/daemon/nimbus/Nimbus.jav...

932

扫码关注云+社区