1

これが私のコードです:

import java.util.List;

import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.bc.filter.SearchRequestService;
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.issue.search.SearchException;
import com.atlassian.jira.issue.search.SearchProvider;
import com.atlassian.jira.issue.search.SearchRequest;
import com.atlassian.jira.issue.search.SearchResults;
import com.atlassian.jira.web.bean.PagerFilter;


class IssueTest{

    String  id;
    String type;
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }

    public IssueTest(String id,String type)
    {
        this.id = id;
        this.type = type;

    }


}


public class test {

    /**
     * @param args
     */

     static List<IssueTest> issues; 


    public static void main(String[] args) {
        // TODO Auto-generated method stub

        test t = new test();


    }

    public test ()
    {

        IssueTest i = new IssueTest("B-1", "bug");
        issues.add(i);
        IssueTest j = new IssueTest("S-1", "story");
        issues.add(j);
        IssueTest k = new IssueTest("T-1", "task");
        issues.add(k);
        IssueTest l = new IssueTest("T-2", "task");
        issues.add(l);
        IssueTest m = new IssueTest("E-1", "epic");
        issues.add(m);
        IssueTest n = new IssueTest("E-2", "epic");
        issues.add(n);
        IssueTest o = new IssueTest("T-3", "task");
        issues.add(o);
        IssueTest p = new IssueTest("S-2", "story");
        issues.add(p);
        IssueTest q = new IssueTest("B-2", "bug");
        issues.add(q);
        IssueTest r = new IssueTest("B-3", "bug");
        issues.add(r);

    }


}

このリストを「タイプ」に従ってソートしたいと思います。すべてのオブジェクトを次の順序で表示します-タスクバグストーリーエピック

4

4 に答える 4

3

Comparatorその順序を実装するためのカスタムを作成する必要があります。残念ながら、サードパーティのライブラリがないと、これは少し複雑になります...特にJava7を使用していない場合はそうです。

Comparator<IssueTest> comparator = new Comparator<IssueTest>() {
  private int getStringPosition(String str) {
    if(str.equals("task")) {
      return 0;
    } else if (str.equals("bug")) {
      return 1;
    } else if (str.equals("story")) {
      return 2;
    } else if (str.equals("epic")) {
      return 3;
    } else {
      throw new AssertionError();
    }
  }
  public int compare(IssueTest a, IssueTest b) {
    return getStringPosition(a.getType()) - getStringPosition(b.getType());
  }
};
Collections.sort(list, comparator);

ただし、文字列型の代わりに列挙型を使用した場合、これははるかに簡単です。

サードパーティのライブラリを使用できる場合、これはGuavaを使用すると少し簡単になる可能性があります。

Ordering<String> typeOrdering = Ordering.explicit("task", "bug", "story", "epic");
Ordering<IssueTest> issueTestOrdering =
 typeOrdering.onResultOf(new Function<IssueTest, String>() {
   public String apply(IssueTest it) {return it.getType(); }
 });
Collections.sort(list, issueTestOrdering);

(開示:私はグアバに貢献します。)

于 2012-08-01T12:41:58.167 に答える
2

Collections.sort(lst)たとえば、コンパレータメソッドを定義して使用できます。

于 2012-08-01T12:41:13.830 に答える
2

それがオブジェクトのリストをソートしたい唯一の方法である場合、正しい方法はを実装することです。IssueTestComparable

http://docs.oracle.com/javase/tutorial/collections/interfaces/order.htmlで詳しく説明されています

さまざまな場所でさまざまなキーで並べ替える場合は、IssueTestimplementComparableを作成せずに、を実装するクラスのセットを作成しますComparator<IssueTest>

于 2012-08-01T12:41:56.273 に答える
1
public class IssueComparator implements Comparator<IssueTest>{

    @Override
    public int compare(IssueTest issue1, IssueTest issue2) {

        String type1 = issue1.getType();
        String type2 = issue2.getType();

        if (type1.length() > type2.length() ){
            return +1;
        }else if (type1.length() < type2.length() ){
            return -1;
        }else{
            return 0;
        }
    }

明らかに、長さは使用するのに適切な基準ではありません。上記は、の実装をComparator完了する方法を説明するためのものです。

于 2012-08-01T12:44:04.383 に答える