7

一致するアイテムが表示され、他のアイテムが表示される配列を並べ替える必要があります。

例の場合。私は配列を持っています:[ z 、 asxdf 、 abasdf 、 abcasdf 、 b 、 bc 、 bcd 、 c ] 私が必要とするのは、 KeyWord を渡すときに"b"と仮定すると、指定された配列をソートする必要があります。b..が最初に来て、残りはその後です。最終出力を生成するもの: [ b 、 bc 、 bcd 、 z 、 c 、 .. (残り)]

Javaでコンパレータを使用できる場合は?

String keyWord = "b";
String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
Arrays.sort(s, new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {

            //Code to sort array according to need

    }
});
System.out.println(Arrays.toString(s));

Result -> [ b , bc , bcd , z , c , ...]

(これを解決するのに役立つ場合は、配列の代わりにリストを使用するか、他のものを使用する場合があります)

4

7 に答える 7

11

Comparator でそれを行うことができるかどうかという質問に答えると、答えはイエスです。次のように、匿名の Comparator を作成する代わりに、新しい Comparator クラスを作成するだけで済みます。

    class MyComparator implements Comparator<String> {

        private final String keyWord;

        MyComparator(String keyWord) {
            this.keyWord = keyWord;
        }

        @Override
        public int compare(String o1, String o2) {

            if(o1.startsWith(keyWord)) {
                return o2.startsWith(keyWord)? o1.compareTo(o2): -1;
            } else {
                return o2.startsWith(keyWord)? 1: o1.compareTo(o2); 
            }
        }
    }

コードでそのコンパレータを使用します。

    String keyWord = "b";
    String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};
    Arrays.sort(s, new MyComparator(keyWord));
    System.out.println(Arrays.toString(s));
于 2013-06-25T06:19:42.303 に答える
3

キーワードが一致した後の文字列の長さが重要であるように見えるため、ここに私のバージョンを示します。

Arrays.sort(s, new Comparator<String>() {

    @Override
    public int compare(String o1, String o2) {

        boolean o1Has = o1.startsWith( keyWord );
        boolean o2Has = o2.startsWith( keyWord );

        if( o1Has && !o2Has  ) return -1;
        else if( o2Has && !o1Has ) return 1;
        else if( o1Has && o2Has ) return 0;
        else
            return o1.length() - o2.length();
    }
});

収量:

[b、bc、bcd、z、c、asxdf、abasdf、abcasdf]

于 2013-06-25T06:42:19.623 に答える
1

I will also add that you can read about Comparator and Comparable in this Oracle tutorial http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html.

于 2013-06-25T06:59:28.943 に答える
0

どうですか:

List result = new ArrayList();
for(int i=0;i<s.length();i++) {
    if(s[i].startsWith(keyWord)) {
        result.add(s[i], 0);  // Adding to the beginning
    } else {
        result.add(s[i]);  // Adding to the end
    }
}
于 2013-06-25T06:13:56.367 に答える
0

以下をご確認ください

package com.pantech.sam.demos;

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

public class SortArray {

/**
 * @param args
 */
private final static char keyWord = 'b';

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String[] s = {"z", "asxdf", "abasdf", "abcasdf", "b", "bc", "bcd", "c"};

    System.out.println("FIRST WAY " + sortArray(s));

    Arrays.sort(s, new CustomeComparator(keyWord));
    System.out.println("SECOND WAY" + Arrays.toString(s));

}

static List<String> sortArray(String[] sArray){
    Arrays.sort(sArray) ;
    List<String> l1 = Arrays.asList(sArray);
    List<String> l2 = new ArrayList<String>(l1.size());
    int index = 0;
    for (String str : l1) {
        if (str.charAt(0) == keyWord) {
            l2.add(index++,str); // add at start
        }else{
            l2.add(l2.size(), str); // add at end
        }

    }
    return l2;
}

}


class CustomeComparator implements Comparator<String> {
private final char keyWord;

CustomeComparator(char keyword2) {
    this.keyWord = keyword2;
}


@Override
public int compare(String o1, String o2) {
    // TODO Auto-generated method stub
      if(o1.charAt(0) == (keyWord)) {
            return o2.charAt(0) == (keyWord)? o1.compareTo(o2): -1;
        } else {
            return o2.charAt(0) == (keyWord)? 1: o1.compareTo(o2); 
        }   }
}
于 2013-06-25T07:16:36.007 に答える