java—如何按树Map键的长度排序,如果键的长度相等,则按字母顺序排序并写入文本文件

ugmeyewa  于 2021-07-09  发布在  Java
关注(0)|答案(3)|浏览(432)

我有一个问题如何继续,任何人可以帮助代码?
让我也知道基本概念。。。

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

   }
}

谢谢!!

klr1opcd

klr1opcd1#

创建一个键列表(或使用Map的键集),然后编写自己的比较器对该列表进行排序,然后遍历排序后的列表以创建输出文件。
比较器可能如下所示:

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

编辑:或者,正如其他答案所指出的,将这个比较器传递给树Map的构造函数。

oo7oh9g9

oo7oh9g92#

java TreeMap 有一个构造函数 new TreeMap(Comparator<? super K>) . 所以你可以示例化一个 TreeMap 用一个 Comparator 像你想的那样分类然后直接放在这里 TreeMap . 当您迭代这个Map的入口集时,元素将按您需要的顺序排列。
java-8-functional风格的比较器可以写成

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

qlzsbp2j3#

你必须提供你自己的比较仪给 TreeMap :

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

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

treemap.addAll(map);

或者更好的方法是,首先使用树状图来创建变量 map . 所以不需要复制 map 到一个新的 TreeMap .
制作比较器的一个简单方法是使用类中的函数 java.util.Comparator :

Comparator<String> myComparator = comparingInt(String::length).thenComparing(naturalOrder());

相关问题