0

プロジェクトで番地を並べ替える必要があります。しかし、私の問題の正確なロジックは得られませんでした。

リストは次のとおりです。

9-11, 9-01, 10-02, 10-01, 2-09, 3-88, 9-03

上記のリストを次のように並べ替える必要があります。

2-09, 3-88, 9-01, 9-03, 9-11, 10-01, 10-02

上記のような出力が必要です。

Javaコーディングで誰か助けてくれますか?

4

4 に答える 4

0

私はあなたが解決した問題を共有しています。あなたが望むものを正確に得るのに役立つかもしれません...

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

public class HouseNo {

    public HouseNo(String house, String block) {
        this.houseno = house;
        this.blockno = block;
    }

    private String houseno;
    private String blockno;

    public String getHouseno() {
        return houseno;
    }

    public void setHouseno(String houseno) {
        this.houseno = houseno;
    }

    public String getBlockno() {
        return blockno;
    }

    public void setBlockno(String blockno) {
        this.blockno = blockno;
    }

    public static class SortByHouseNo implements Comparator<HouseNo> {

        @Override
        public int compare(HouseNo o1, HouseNo o2) {
            Integer first = Integer.valueOf(o1.getHouseno());
            Integer second = Integer.valueOf(o2.getHouseno());

            Integer f1 = Integer.valueOf(o1.getBlockno());
            Integer f2 = Integer.valueOf(o2.getBlockno());

            if (first.compareTo(second) == 0) {
                return f1.compareTo(f2);
            }
            return first.compareTo(second);
        }
    }

    @Override
    public String toString() {
        return "House -> " + this.getHouseno() + "-" + this.getBlockno();
    }

    public static void main(String[] args) {
        // Final
        String houseList[] = { "9-11", "9-01", "10-02", "10-01", "2-09",
                "3-88", "9-03", "9-3" };

        HouseNo house = null;
        ArrayList<HouseNo> sortedList = new ArrayList<>();
        for (String string : houseList) {
            String h = string.substring(0, string.indexOf('-'));
            String b = string.substring(string.indexOf('-') + 1);
            house = new HouseNo(h, b);
            sortedList.add(house);
        }

        System.out.println("Before Sorting :: ");
        for (HouseNo houseNo : sortedList) {
            System.out.println(houseNo);
        }

        Collections.sort(sortedList, new SortByHouseNo());
        System.out.println("\n\nAfter Sorting HouseNo :: ");
        for (HouseNo houseNo : sortedList) {
            System.out.println(houseNo);
        }

    }
}

更新されたソリューション......

ここに画像の説明を入力

于 2013-11-07T11:56:21.950 に答える
0

リストから「-」を削除するだけです

9-11, 9-01, 10-02, 10-01, 2-09, 3-88, 9-03

になる

911, 901, 1002, 1001, 209, 388, 903

選別

209, 388, 901, 903, 911, 1001, 1002

「ー」を後ろから2ヶ所飛ばして配置

2-09, 3-88, 9-01, 9-03, 9-11, 10-01, 10-02

そのような単純な !

于 2013-11-07T11:39:26.263 に答える
0

このようにしてください

あなたのコンパレータ

class SimpleComparator implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {
        String [] o1sub = o1.split("-");
        String [] o2sub = o2.split("-");
        int value1 = Integer.parseInt(o1sub[0]);
        int value2 = Integer.parseInt(o2sub[0]);
        if(value1!=value2){
            return new Integer (value1).compareTo(value2);
        }
        int value3 = Integer.parseInt(o1sub[1]);
        int value4 = Integer.parseInt(o2sub[1]);
        if(value3!=value4){
            return new Integer(value3).compareTo(value4);
        }
        return 0;

    }
}

データ

   String [] array ={"9-11","9-01","10-02","10-01","2-09","3-88","9-03"};

並べ替え

 Arrays.sort(array,new SimpleComparator());     
 System.out.println(Arrays.toString(array));

出力

[2-09, 3-88, 9-01, 9-03, 9-11, 10-01, 10-02]
于 2013-11-07T12:01:17.413 に答える
0

ここでのロジックは単純です。

209 < 388 < 901 < 902 < 911 < 1001 < 1002

考えられる解決策の1つは次のとおりです。

    String[] input = {"9-11", "9-01", "10-02", "10-01", "2-09", "3-88", "9-03"};
    Map<Integer, String> map = new TreeMap<Integer, String>();
    for (String s : input) {
        map.put(Integer.valueOf(s.replace("-", "")), s);
    }
    TreeSet<Integer> set = new TreeSet<Integer>(map.keySet());
    String[] output = new String[input.length];
    int i = 0;
    for (Integer key : set) {
        output[i++] = map.get(key);
    }

より柔軟なフォーマットをサポートしたい場合は、 Comparable を実装して正確な比較ルールを定義できます。変更された例を見てみましょう。

    class HouseNumber implements Comparable<HouseNumber>{
        private Integer house;
        private Integer flat;

        private HouseNumber(String s) {
            String[] fields = s.split("-");
            house = Integer.valueOf(fields[0]);
            flat = Integer.valueOf(fields[1]);
        }

        @Override
        public int compareTo(HouseNumber o) {
            if (house.compareTo(o.house) == 0) {
                return flat.compareTo(o.flat);
            } 
            return house.compareTo(o.house);
        }

    }

    String[] input = {"9-11", "9-01", "10-02", "10-01", "2-09", "3-88", "9-03"};
    Map<HouseNumber, String> map = new TreeMap<HouseNumber, String>();
    for (String s : input) {
        map.put(new HouseNumber(s), s);
    }
    TreeSet<HouseNumber> set = new TreeSet<HouseNumber>(map.keySet());
    String[] output = new String[input.length];
    int i = 0;
    for (HouseNumber key : set) {
        output[i++] = map.get(key);
    }
于 2013-11-07T11:39:00.580 に答える