一般来说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")));

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

这里写图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐