0

私は実験をセットアップするプログラムを作成しており、入力した被験者 (または人) をアルファベット順に並べたいと考えています。タイプサブジェクトの配列リストがあり、名前でアルファベット順に並べたいと思います。

import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Experiment
{
public Random number;
public ArrayList<String> allSubject;
public ArrayList<Subject> allSubjects,alphaSubjects;
public ArrayList<Group> experiment;
public Integer value;
public HashMap<Integer,Subject> matched;
private ArrayList<Integer> numbers;
/**
 * Make a new Experiment.  Then use method addSubject to add
 * Subjects to your experiment.  Then call the assignGroups
 * method to assign Subjects to each group.
 */
public Experiment()
{
    number = new Random();
    numbers = new ArrayList<Integer>();
    experiment = new ArrayList<Group>();
    matched = new HashMap<Integer,Subject>();
    allSubjects = new ArrayList<Subject>(); 
    allSubject = new ArrayList<String>();
    alphaSubjects = new ArrayList<Subject>();
}

/**
 * Alphabetizes the list of Subjects based on their
 * name input by the user.  As of right now, this method
 * is case sensitive meaning Strings starting with 
 * capitals will be listed before those without capitals.
 */
private void alphabetize()
{

           Collections.sort(allSubject);

        //compare the String arraylist to the subject arraylist to reset the subject arraylist indeces in alphabetical order.

       for(int i =0;i<allSubject.size();i++)
       {
        String theName = allSubject.get(i);
         for(Subject subject:allSubjects)
        {
          if(subject.getName().toLowerCase().contains(theName))
         {
            alphaSubjects.add(new Subject(subject.getName(),subject.getDescription()));
         }
        }

     }
}
/**
 * Adds a new Subject to the experiment.
 */
public void addSubject(String name, String description)
{
    allSubjects.add(new Subject(name,description));
    allSubject.add((name.toLowerCase()));
}

そのため、サブジェクトを配列リストに追加する代わりに、そのサブジェクトから名前を削除して、まったく別の配列リストに追加する必要があるのではなく、サブジェクトの名前をアルファベット順に並べ替える方法はありますか。

ああ、これがクラスです:件名。

public class Subject
{
public final String name;
public final String description;
public Subject(String name, String description)
{
    this.name = name;
    this.description = description;
}
public Subject(int aNumber)
{
    name = "Subject" + aNumber;
    aNumber++;
    description = "default";
}
public String getName()
{
    return name;
}
public String getDescription()
{
    return description;
}

}

4

3 に答える 3

1

独自のコンパレータを使用して、サブジェクト ArrayList を SortedList ( http://www.glazedlists.com/documentation/tutorial-100#TOC-Sorting-Tables-Sorting-Tables ) でラップできます。

SortedList sortedSubjects = new SortedList<Subject>(allSubjects,new Comparator<Subject>() {
        @Override
        public int compare(Subject left, Subject right) {
            return left.getName().compareTo(right.getName);
        }
    }); 
于 2013-11-05T06:32:09.013 に答える
0

あなたがする必要があるのは、クラスを実装Comparableして追加することだけcompareTo()です:

public class Subject implements Comparable<Subject>
{
    ....

     @Override
     public int compareTo(Subject other)
     {
         return this.getName().compareTo(other.getName());
     }
}

これで、クラスはそれ自体の Comparable を実装するため、 を使用Collections.sort()して のリストを並べ替えることができますSubjects

詳細については、こちらのチュートリアルをご覧ください。幸運を!

于 2013-11-05T06:29:04.993 に答える
0

Comparator または Comparable を実装し、compare(..) 、 compareTo(..) メソッドをオーバーライドして、納得させることができます。あなたの場合、このメソッドを実装する際に「サブジェクトの名前」を考慮する必要があります。次にCollections.sort(yourList<Subject>)、被験者名に基づいてソートされた結果が得られます。

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


public class Subject implements Comparable<Subject>
{
public final String name;
public final String description;
public Subject(String name, String description)
{
    this.name = name;
    this.description = description;
}
public Subject(int aNumber)
{
    name = "Subject" + aNumber;
    aNumber++;
    description = "default";
}
public String getName()
{
    return name;
}
public String getDescription()
{
    return description;
}

    @Override
    public int compareTo(Subject o) {
        return this.getName().toUpperCase().compareTo(((Subject)o).getName());
    }

    public static void main(String[] args) {
        Subject s3 = new Subject("C","");
        Subject s1 = new Subject("Z","");
        Subject s2 = new Subject("A","");

        List<Subject> list = new ArrayList<Subject>();
        list.add(s1);
        list.add(s2);
        list.add(s3);

        Collections.sort(list);

        for(Subject sub:list){
            System.out.println(sub.getName());
        }
    }
}
于 2013-11-05T06:25:43.737 に答える