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

相关文章

来自专栏精讲JAVA

Comparable 与 Comparator 浅析

来源:朱小厮, blog.csdn.net/u013256816/article/details/50899416 今天博主在翻阅TreeMap的源码,发现其键...

2056
来自专栏苍云横渡学习笔记

【JavaSE(十)】Java集合框架(中)

1924
来自专栏java达人

将List转化为Map的通用方法—泛型方法的简单运用

有时候我们需要将List转化为Map,将数据散列存储,以提高查询效率。但是集合类中所存放的对象类型是不同的,因此,针对不同类型,我们常会写多个逻辑重复的转化方法...

2048
来自专栏13blog.site

shell脚本中字符串的常见操作及"command not found"报错处理(附源码)

简介 昨天在通过shell脚本实现一个功能的时候,由于对shell处理字符串的方法有些不熟悉导致花了不少时间也犯了很多错误,因此将昨日的一些错误记录下来,避免以...

3318
来自专栏糊一笑

ES6之symbol

为什么需要使用Symbol 考虑到以下场景: // a library var L = (function() { var prop1 = 'prop1...

2624
来自专栏魂祭心

原 c# params 工作原理。

3297
来自专栏吴伟祥

按层级/条件解析Json,获取相应的key或value中的相关数据

532
来自专栏平凡文摘

Comparable 与 Comparator 浅析

904
来自专栏代码拾遗

​Java反射详解

反射的概念是软件可以在运行时,检查,分析,修改代码。例如:在Junit中,使用@Test注解等。 在Java中,通过反射可以在运行时检查字段,方法,类,接口,注...

1003
来自专栏LanceToBigData

JavaSE集合(八)之Map

前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族。以前的时候学习Map的时候没有很认真的去学习,我觉得...

1908

扫码关注云+社区