Как отсортировать по длине ключа дерева карты, если длина ключа равна, сделать это по алфавиту и записать в текстовый файл - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть проблема, как продолжить, кто-нибудь может помочь код?

Дайте мне знать основную концепцию ...

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

   }
}

Спасибо !!

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вы должны предоставить свой собственный компаратор для 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());
0 голосов
/ 04 февраля 2019

Java TreeMap имеет конструктор new TreeMap(Comparator<? super K>).Таким образом, вы можете просто создать экземпляр TreeMap с сортировкой Comparator, как хотите, и затем поместить непосредственно в этот TreeMap.Когда вы перебираете EntrySet этой карты, элементы будут в нужном вам порядке.

Ваш компаратор в стиле Java-8 может быть записан как

Comparator.comparing(String::length).thenComparing(String::compareTo);
0 голосов
/ 04 февраля 2019

Создайте список ключей (или используйте набор ключей карты), затем напишите свой собственный компаратор, чтобы отсортировать этот список, а затем переберите отсортированный список, чтобы создать выходной файл.

Компаратор может выглядеть следующим образом:

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

РЕДАКТИРОВАТЬ: Или, как указывают другие ответы, передать этот компаратор в конструктор древовидной карты.

...