我在继续操作时遇到问题,有人可以帮忙编写代码吗?
让我也了解基本概念...
readfile data => IBARAKI MitoCity
TOCHIGI UtunomiyaCity
GUNMA MaehashiCity
SAITAMA SaitamaCity
CHIBA ChibaCity
TOKYO Sinjyuku
KANAGAWA YokohamaCity
write text file output => CHIBA : ChibaCity
GUNMA : MaehashiCity
TOKYO : Sinjyuku
IBARAKI : MitoCity
SAITAMA : SaitamaCity
TOCHIGI : UtunomiyaCity
KANAGAWA : YokohamaCity
import java.util.*;
import java.io.*;
public class ReadFileDemo{
public static void main(String[] args) throws IOException {
Reader reader = new InputStreamReader(new
FileInputStream(args[0]),"UTF-8");
BufferedReader br = new BufferedReader(reader);
Writer writer = new OutputStreamWriter(new
FileOutputStream("textB.txt"),"UTF-8");
BufferedWriter bw = new BufferedWriter(writer);
Map<String,String> map = new HashMap<String,String>();
String line=null;
while((line=br.readLine())!=null) {
String[] parts = line.split(" ");
String key=parts[0];
String value=parts[1];
map.put(key,value);
}
Map<String, String> treemap = new TreeMap<String, String>(map);
}
}
谢谢!
答案 0 :(得分:0)
创建一个键列表(或使用地图的keySet),然后编写自己的Comparator对列表进行排序,然后遍历已排序的列表以创建输出文件。
比较器可能看起来像这样:
public class Cmp1 implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
if(o1.length() == o2.length()) {
//String's own comparator, which is alphabetical
return o1.compareTo(o2);
}
//otherwise compare the length
return o2.length() - o1.length();
}
}
编辑: 或者,如其他答案所指出的那样,将该比较器传递给树形图的构造函数。
答案 1 :(得分:0)
您必须为TreeMap
提供自己的比较器:
Map<String, String> treemap = new TreeMap<>(myComparator);
然后将所有元素添加到新的TreeMap
中:
treemap.addAll(map);
或更妙的是,首先将TreeMap用于变量map
。因此,不必将map
的内容复制到新的TreeMap
。
制作比较器的一种简单方法是使用类java.util.Comparator
中的函数:
Comparator<String> myComparator = comparingInt(String::length).thenComparing(naturalOrder());
答案 2 :(得分:0)
Java TreeMap
具有构造函数new TreeMap(Comparator<? super K>)
。因此,您可以按照自己的意愿通过TreeMap
实例化Comparator
并将其直接放在此TreeMap
上。在此Map的EntrySet上进行迭代时,元素将按照所需的顺序排列。
您的Java-8功能样式的比较器可以写为
Comparator.comparing(String::length).thenComparing(String::compareTo);