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")));

生成结果已经是排序的了
这里写图片描述

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

10km

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值