-1

HashMap に null 値があるかどうかをテストする関数を作成しています。メソッド .values() は値だけのコレクションを返す必要がありますが、代わりにキーと値の両方が内部に格納されたマップを受け取ります。私の関数の目的は値がnullかどうかをチェックすることなので、これは良くありませんが、キーと値を含むマップを返すと、キーが値なしで保存されている場合、.values().isEmpty() は false を返します。

  public Map<KEY, List<VALUES>> methodName() {
    if (MAPNAME.values().isEmpty()) {
            throw new CustomErrorException(ExceptionHandler.getErrorWithDescription(ErrorConstants.ERROR_MSG_01));
        } else {
            return MAPNAME;
        }
    }

上記の例では、.values() は常にすべてのキーと値を含むマップを返します。HashMap にキーがある場合、私のメソッドは CustomErrorException を決してスローしません。値がないかどうかを検出するはずなので、これは悪いことです。ヘルプ!

4

5 に答える 5

4

値なしで格納されたキーを持つ Map 実装などはありません。すべての Map 実装は次のいずれかです。

  • put値が null の場合に例外をスローする
  • キーと null の値を持つエントリを追加します

null にマップされるキーは、値のないキーとは大きく異なります。キーには値があり、その値は null です (つまり、マップが空でない限り、values コレクションは空になりません)。値のないキーは、マップに含まれていないキーです。

簡単に言えば、おそらく使いたい、MAPNAME.values().contains(null)または単にMAPNAME.containsValue(null)やりたいことをしたいだけです。または、すべてのキーが null にマップされていることを確認している場合は、.values() コレクションを反復処理して確認します。

于 2012-05-14T17:48:30.730 に答える
1

マップを返しています-値ではなくMAPNAME:

return MAPNAME.values();
于 2012-05-14T17:19:43.500 に答える
0

あなたが望むものについてあまり明確ではありません-あなたのマップ値はリストです-それを考えると、キーマップを「値なし」にするには3つの方法があります:

  • にマッピングされたキーnull(テストはmap.values().contains(null))
  • 空のリストにマップされたキー (テストはmap.values().contains(Collections.emptyList()))
  • sでいっぱいのリストにマップされたキーnull

上記のメソッドが現在行っていることは、マップが本当に空 (キーなし) の場合に例外をスローし、それ以外の場合はマップを返すことです。

あなたが何を望んでいるのかは明らかではありません。マップに意味のある値がない場合 (すべてのキーが null または空のリストにマップされる場合) にのみメソッドが例外をスローするようにする場合は、次のようなものが必要です。

public Map<KEY, List<VALUES>> methodName() {
    for( List<VALUES> values : MAPNAME.values() ) // 1
        if( null != values ) // 2
            for( VALUES value : values ) // 3
                if( null != value ) // 4
                    return MAPNAME;

    throw new CustomErrorException(ExceptionHandler.getErrorWithDescription(ErrorConstants.ERROR_MSG_01));
}

これは、合理的に考えられるすべての「空のマップ」シナリオで例外をスローします -- (1) マップが本当に空である、(2) キーのみを含む、(3)値または空のリストnullのみを含む、または ( null4)null値または空のリストまたはnulls のリストのみが含まれます。

(上記のテキストの「空」テストのレベルは、コード内のコメント ラベルに対応しています)。

于 2012-05-14T18:16:13.900 に答える
0

マップに null 値が含まれているかどうかを判断しようとしている場合は、値のコレクションを反復処理し、それぞれをチェックして null かどうかを確認する必要があります。

null 値を持つエントリを含むマップは空ではありません。

于 2012-05-14T17:35:14.620 に答える