1

Arraylistのレコードを持っています。

package com.demo.myproject;

public class Records 
{
    String countryName;
    long numberOfDays;

    public String getCountryName() {
        return countryName;
    }
    public void setCountryName(String countryName) {
        this.countryName = countryName;
    }
    public long getNumberOfDays() {
        return numberOfDays;
    }
    public void setNumberOfDays(long numberOfDays) {
        this.numberOfDays = numberOfDays;
    }

    Records(long days,String cName)
    {
        numberOfDays=days;
        countryName=cName;
    }
}

Arraylist<Records>の値が含まれています

 Singapore     12 
 Canada         3
 United Sates  12
 Singapore     21

私の出力が

Canada         3
Singapore     33
United States 12

解決策、アプローチを手伝ってください。

4

4 に答える 4

1

キーが国になるマップにレコードを保存できます。

新しいレコードを受け取ったら、その国が既にマップに含まれているかどうかを確認し、含まれている場合は日数を追加し、含まれていない場合は作成します。

Map<String, Record> map = new HashMap<String, Record> ();

addRecord(map, someRecord);

private void addRecord(Map<String, Record> map, Record record) {
    Record inMap = map.get(record.getCountryName());
    if (inMap == null) {
        inMap = record;
    } else {
        inMap.setNumberOfDays(inMap.getNumberOfDays() + record.getNumberOfDays());
    }
    map.put(record.getCountryName(), inMap);
}

ノート:

  • 日数の合計を使用して新しいレコードを作成するだけでなく、レコードを変更しても問題ないと思います。
  • map.values();呼び出して繰り返し処理することで、レコードのコレクションを取得できます
  • ArrayList は、ユース ケースにはあまり適していません。本当に ArrayList に固執する必要がある場合は、すべての新しいレコードについて、リストをループする必要があります。リスト内のレコードの 1 つに新しいレコードと同じ国があるかどうかを確認し、見つかった場合はそのレコードを更新するか、またはそうでない場合は、新しいレコードを追加します。
于 2012-10-22T07:36:06.500 に答える
1
public class RecordsMain {

    static ArrayList<Records> al = new ArrayList<Records>();
    static boolean flag = false;

    public static void main(String[] args) {
        Records rec1 = new Records(12,"Singapore");
        Records rec2 = new Records(3,"Canada");
        Records rec3 = new Records(12,"United States");
        Records rec4 = new Records(21,"Singapore");

        addToList(rec1);
        addToList(rec2);
        addToList(rec3);
        addToList(rec4);

        for (int i = 0; i < al.size(); i++) {     
            System.out.println(al.get(i).getCountryName() + " :: " + al.get(i).getNumberOfDays());
        }
    }

    public static void addToList(Records records) {
        for (int i = 0; i < al.size(); i++) {     
            if(al.get(i).getCountryName().equals(records.getCountryName())) {
                al.get(i).setNumberOfDays(al.get(i).getNumberOfDays()+records.getNumberOfDays());
                flag=true;
            }
        }
        if (flag == false)
            al.add(records);
    }
}

ノート:

  • この関数addToListはレコードを追加し、追加中にCountryNamesが重複しているかどうかを確認します。重複している場合は、日数を追加し、新しいエントリを にマークしませんArrayList
  • の並べ替えも探しているかどうかわからなかったListので、試しませんでした。
于 2012-10-22T09:10:09.843 に答える
0

そこで何をしたいのか正確にはわかりませんが、特定の基準で並べ替えたい場合は、同等またはコンパレータのインターフェイスを使用して、ArrayList の基準を使用してレコードを並べ替え、collections.sort() メソッドを使用して並べ替えることができます。

于 2012-10-22T10:55:02.457 に答える
0

これらのレコードは自分で作成すると思います。要素の特定の順序が必要ない場合は、HashMap を使用し、assylias が言ったように、国要素が存在しない場合にのみ国要素を作成する必要があります。要素の順序を維持する必要がある場合 (または後で名前などで並べ替える必要がある場合) は、ArrayList と "indexOf()" メソッドを使用して簡単に見つけることができます。

于 2012-10-22T07:50:00.660 に答える