質問

私の収集物したい准各オブジェクトのこれらに読みや(HashMap、オブジェクトの作成を目的にした、だします。

したヴィッセル神戸は、神戸の二つのループを一つ入れ子のその他のものかもしれないものの問題は一般的に理解液---

どの多数の場合は回収物を上かったですね。

編集後のジョセフDaigleコメント:の項目のCollectionオブジェはすべて同じタイプのお部屋のホテルから予約可能となる。

Collection<Room> roomsFromA = getRoomsFromA();
Collection<Room> roomsFromB = getRoomsFromB();
for(Room roomA : roomsFromA){
    for(Room roomB : roomsFromB){
        //add roomA and roomB to something, this is not important for what I need
        //the important part is how you handle the part before
        //especially if Collection objects number grows beyond two
    }
}

編集2:私の説明を、しまいまして申し訳ありませんうのは明らかでない。以下の例:ユーザーの要求をダブルとシングルルームです。ホテルには、3倍、4シングル室もご利用いただけます。

ま准毎に"ダブルルーム"ひと"シングルルーム"、これは各部屋には、独自の特徴と言い、インターネットをより快適なビューです。私はあらかじめ与えておく必要があり、ユーザーのすべての組み合わせると思うが選択できます。

この場合、二つの集室オブジェのあり方については、どうでしょ管理の問題がいもホテルユーザーに提供-ご要望以上のお部屋か。

役に立ちましたか?

解決

あなたがここでやろうとしていること。これは、離散数学でよく知られた問題であり、私はそれだけで組合せ数学と呼ばれていると思わY.のセットからXを選ぶのすべての可能な順列を取得することです。

あなたの問題を解決するには、すべてのお部屋タイプを含むスーパーコレクションを作成する必要があります。これは、配列またはリストである場合は、この例では、すべての可能性を計算するをを使用することができますY.のセット例からXを選択する方法は、リスト/配列から、あなたにインデックスを与えるだろう。

他のヒント

コレクションは、正確に並べるのですか?

HashMap map = new HashMap();
for (int i=0; i<c1.Size(); i++) {
   map.put(c1[i], c2[i]);
}
あなたが唯一の1つを有するそれらの両方を検索する必要がある場合、私は知らないので、

さて、HashMapのは動作しません。

私は一種の...ペアを受信するクラスを作成します:

private static class Pair<K, T> {
    private K one;
    private T two;

    public Pair(K one, T two) {
        this.one = one;
        this.two = two;
    }

    /**
     * @return the one
     */
    public K getOne() {
        return one;
    }

    /**
     * @return the two
     */
    public T getTwo() {
        return two;
    }
} 

そして彼らとのリストを作成します。

あなたの例では、そのようにモデル化するために、より自然なことと思いますので、「roomsFromB」からの戻り値は、「roomsFromA」の戻り値のサブコレクションであることを意味します:

class Room {
   public Collection<Room> getRoomsFromB { ... 
}

あなたがやらせることになるます:

//コレクションルーム

for (Room a: rooms)
{ 
   for(Room b a.getRoomsFromB){ ...

これは、彼らが、もちろん、階層的にモデル化していることを想定しています。そうでないなら、これは不適切であるが、その後、あなたが求めている質問は、それは私には思える、それらの間の関係をモデル化する方法を実際にある、あなたはまだそれが明示されていない。

あなたはまさにこのロジックが必要かどうかを再検討するかもしれません。あなたはすぐに手に負えなくなることができますO(N ^ 2)の動作を、導入しています。 (技術的にO(MN)が、私は、m及びnを推測しているが、ほぼ同じオーダーである。)

あなたの問題の別の解決策はありますか?おそらく、あなたはAの全てとBの全てが含まれる「セット」、その後、AとBの各オブジェクトではなく、このセットを指す可能性を作成することができます?

なっているのでしょうか:

  • 各要素 collection 1 試合は単一の要素 collection 2
  • コレクションに同じ サイズ
  • コレクションに発注することができ、 の試合の各要素 館

  1. ダコレクション"(同 注)オフィスフロア を識別すオブジェクトです。
  2. 繰り返し処理を実行しても所蔵グループの構築の関係オブジェクトを追加で新たに収集します。

見ればこのことです:

public static class Room {
    private int number;
    private String name;

    public Room(int number, String name) {
        super();
        this.number = number;
        this.name = name;
    }

    public int getNumber() {
        return number;
    }

    public String getName() {
        return name;
    }
}

public static class RoomRelation {
    private Room a;
    private Room b;

    public RoomRelation(Room a, Room b) {
        super();
        this.a = a;
        this.b = b;
    }

    public Room getA() {
        return a;
    }

    public Room getB() {
        return b;
    }

    @Override
    public String toString() {
        return a.getName() + "(" + a.getNumber() + ") " + b.getName() + "(" + b.getNumber() + ")";
    }
}

public static void main(String[] args) {

    List<Room> roomsFromA = new ArrayList<Room>();
    List<Room> roomsFromB = new ArrayList<Room>();

    roomsFromA.add(new Room(1,"Room A"));
    roomsFromA.add(new Room(2,"Room A"));

    roomsFromB.add(new Room(1,"Room B"));
    roomsFromB.add(new Room(2,"Room B"));

    Comparator<Room> c = new Comparator<Room>() {
        @Override
        public int compare(Room o1, Room o2) {
            return o1.getNumber() - o2.getNumber();
        } };

    Collections.sort(roomsFromA, c);
    Collections.sort(roomsFromB, c);

    List<RoomRelation> relations = new ArrayList<RoomRelation>();

    for (int i = 0; i < roomsFromA.size(); i++) {
        relations.add(new RoomRelation(roomsFromA.get(i), roomsFromB.get(i)));
    }

    for (RoomRelation roomRelation : relations) {
        System.out.println(roomRelation);
    }
}

あなたの質問は非常に明確ではありません。私が理解として、あなたはすべての部屋の組み合わせ、マイナス重複を一覧表示します。すべての部屋の組み合わせの2次元配列を構築するために私たちにいくつかのコードをここに。部屋より多くの種類については、別のネストされたループに入れます。

Collection<Room> roomsFromA = getRoomsFromA();
Collection<Room> roomsFromB = getRoomsFromB();

Room[][] combinations = new Room[roomsFromA .size()][roomsFromB .size()];

int a = 0;
int b = 0;

for(Room roomA : roomsFromA){

   for(Room roomB : roomsFromB){
      combinations [a][b] = [roomA][roomB]; //Build up array
      b++; 
   }
   a++;
}

return combinations;

これは共通の問題です。これは直積に呼ばれています。あなたがあなたのケースのように2つのコレクションを持っている場合は、私は2つのネストされたループを持ってすることを躊躇しないだろう。そうでない場合は、この質問を参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top