4

長さで並べ替えられた単語のリストを作成するように言われ、同じ長さの単語はアルファベット順に並べ替えられます。これは、これまでのところそれを行う方法について私が持っているものです。

public static void doIt(BufferedReader r, PrintWriter w) throws IOException {
    TreeMap<String, Integer> s = new TreeMap<String, Integer>();
    ArrayList<Integer> count = new ArrayList<Integer>();
    String line;        
    int length;
    while ((line = r.readLine()) != null) {
        length = line.length();

        s.put(line, length);
        if (!count.contains(length)){
            count.add(length);
        }
    }    
    Collections.sort(count);
    System.out.println(count);
}

私の考え方は、TreeMap を使用して文字列を保持し、単語の長さをキーにすることでした。また、すべての単語の長さを重複なしで追跡する ArrayList もあり、並べ替えられます。

キー値 5 の TreeMap を何らかの形で呼び出すことを望んでいました。これにより、5 文字を含むすべての単語が一覧表示されます。

私は正しい軌道に乗っているかどうか疑問に思っていましたか?私は1時間以上遊んでいて、この後何をすべきか分からないようです. 私はこれに正しい角度からアプローチしていますか?

4

6 に答える 6

3

単純なリストを使用してそれを行うことができます。次のコードを試してください。

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


/**
 *
 * @author Masudul Haque
 */
public class LengthSort {
    public static void main(String[] args) {
        List<String> list=new ArrayList<>();
        list.add("cowa");
        list.add("cow");
        list.add("aow");
        Collections.sort(list, new Comparator<String>() {

            @Override
            public int compare(String o1, String o2) {
                if(o1.length()>o2.length()){
                    return 1;
                }else{
                    return o1.compareTo(o2);
                }
            }
        });

        System.out.println(list);
    }
}
于 2013-09-19T03:32:31.640 に答える
1

他の回答が言うように、はるかに簡単で最良の方法は、カスタムコンパレータを作成することです。

しかし、あなたが試みていたのと同様の方法でそれを行うには、長さをキーにして、単一の文字列を値として持つのではなく、その長さのすべての単語のリストを持っています。したがって、フォームのマップ

Map<Integer,List<String>>

次に、任意の長さのキーを呼び出して、このような単語の並べ替えられたリストを返すことができます

Collections.sort(yourMap.get(theLength))

しかし、コンパレータを使用するよりもはるかに複雑です

于 2013-09-19T03:30:45.783 に答える