1

アプリケーションで一意の顧客 ID を生成しようとしているときに問題が発生しました。数字を 1 から始めて上に上げていきます。次のコードを使用して次の顧客番号を生成するツリーマップを使用する登録クラスがあります。

public String generateNumber()
{
    int number = 1;

    for(Map.Entry<String, Forsikringkunde> entry : this.entrySet())
    {
        if(entry.getValue().getNumber().equals(String.valueOf(number)))
        {
            number++;
        } 
    }return String.valueOf(number);
}

アプリケーションで顧客を生成すると、マップを反復しても数値が重複します。顧客を作成するとき、オブジェクトを作成し、このメソッドを実行し、ID に set-method を使用してレジスタに追加しますが、機能しません。誰にも解決策がありますか?

4

2 に答える 2

1

Java 8 を使用している場合は、これを試すことをお勧めします。

int max = this.values()
              .stream()
              .map(Forsikringkunde::getNumber)
              .mapToInt(Integer::parseInt)
              .max()
              .orElse(0);

return String.valueOf(max + 1);
于 2015-05-08T19:54:48.337 に答える
0

代わりにマップ内の最大数を見つけるようにコードを変更し、その +1 を使用します。

public String generateNumber()
{
    int max = -1;

    for(Map.Entry<String, Forsikringkunde> entry : this.entrySet())
    {
        int entry = Integer.parseInt(entry.getValue().getNumber());
        if(entry > max)
        {
            max = entry;
        } 
    }
    return String.valueOf(max + 1);
}

(これはあなたのコーディング スタイルを模倣しています。aioobe の回答は、同じことをよりエレガントに行う方法を示しています。)

マップが順番に繰り返されていないため、メソッドは機能しません。たとえば、2 人のユーザーに対して number21それぞれを反復処理すると、次のようになります。

  1. 「数字=1」から始める
  2. 確認してくださいnumber == 2: そうではないので、続行します
  3. Check if number == 1: あるので設定number = 2

numberID 2 のユーザーが既に存在する場合でも、ループが完了し、 2 になります。順番に繰り返されていれば、うまくいったでしょう。

于 2015-05-08T19:52:30.403 に答える