如何通过树形图键的长度来排序的,如果key的长度相等,按字母顺序,使其和写入文本文件

问题描述 投票:0回答:3

我有一个问题,如何继续,任何人的帮助可以编码?

让我知道的基本概念太...

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

   }
}

谢谢!!

java dictionary treemap
3个回答
0
投票

Java的TreeMap有一个构造函数new TreeMap(Comparator<? super K>)。所以,你可以只实例化一个TreeMapComparator排序像你想,然后直接就把这个TreeMap。当你迭代的这个映射的entrySet的元素会在你需要的顺序。

您在Java中-8功能的风格比较可以写成

Comparator.comparing(String::length).thenComparing(String::compareTo);

0
投票

创建快捷键的列表(或使用地图的的keySet),然后写你自己的比较排序该列表,然后遍历排序列表创建输出文件。

比较器可能是这样的:

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();
    }
}

编辑:或者,正如其他的答案指出,传递比较器树状图的构造。


0
投票

你必须提供自己的比较的TreeMap

Map<String, String> treemap = new TreeMap<>(myComparator);

然后添加到新TreeMap的所有元素:

treemap.addAll(map);

甚至更好,在可变qazxsw POI首先使用一个TreeMap。所以它不会是必要qazxsw POI的内容复制到一个新的map

一个简单的方法,使比较器在课堂上使用map功能:

TreeMap
© www.soinside.com 2019 - 2024. All rights reserved.