0

次のような 2 つのハッシュ マップがあります。

1.=============Employee=================


Key : 1_10 : Value : 13/04/2012
Key : 1_11 : Value : 18/04/2012
Key : 1_12 : Value : 19/04/2012
Key : 1_14 : Value : 23/04/2012
Key : 1_13 : Value : 20/04/2012
Key : 1_16 : Value : 25/04/2012
Key : 1_1  : Value : 02/04/2012
Key : 1_15 : Value : 24/04/2012
Key : 1_18 : Value : 27/04/2012
Key : 1_3  : Value : 04/04/2012
Key : 1_17 : Value : 26/04/2012
Key : 1_2  : Value : 03/04/2012
Key : 1_5  : Value : 06/04/2012
Key : 1_19 : Value : 30/04/2012
Key : 1_4  : Value : 05/04/2012
Key : 1_7  : Value : 10/04/2012
Key : 1_6  : Value : 09/04/2012
Key : 1_9  : Value : 12/04/2012
Key : 1_8  : Value : 11/04/2012

2.=============Working day=================

Key : 27 : Value : 27/4/2012
Key : 02 : Value : 02/4/2012
Key : 26 : Value : 26/4/2012
Key : 19 : Value : 19/4/2012
Key : 11 : Value : 11/4/2012
Key : 04 : Value : 04/4/2012
Key : 30 : Value : 30/4/2012
Key : 06 : Value : 06/4/2012
Key : 13 : Value : 13/4/2012
Key : 09 : Value : 09/4/2012
Key : 03 : Value : 03/4/2012
Key : 23 : Value : 23/4/2012
Key : 20 : Value : 20/4/2012
Key : 16 : Value : 16/4/2012
Key : 10 : Value : 10/4/2012
Key : 18 : Value : 18/4/2012
Key : 25 : Value : 25/4/2012
Key : 17 : Value : 17/4/2012
Key : 12 : Value : 12/4/2012
Key : 24 : Value : 24/4/2012
Key : 05 : Value : 05/4/2012

キーは同じではありませんが、値は同じで、値が同じでない場合もあります。

employeemapと比較して存在しない値を知りたいworkingdaymap

if (!employeeMap.containsValue(workingdayMap.get(wKey))) {
    //take the value which is not present in employeeMap which is present in workingdayMap
}

しかし、employeeMapからnullが返されます。

これを解決するのを手伝ってもらえますか?

よろしくトニー

4

4 に答える 4

2

このようなものが機能するはずです:

Set workingValues = new HashSet(workingdayMap.values());
workingValues.removeAll(employeeMap.values());

メソッドをworkingdayMap使用してすべての値を取得します。これは変更されるため、これを直接values()変更したくないので、と呼ばれる値を作成します。CollectionworkingdayMapSetworkingValues

次に、で見つかったすべての値を削除します。この値は、に含まれているが含まれていない値をemployeeMap残します。workingdayMapemployeeMapworkingValues

于 2012-05-30T09:25:01.473 に答える
2

このようにしてみてください。

    HashMap<String, Date> employeeMap = new HashMap<String, Date>();

    HashMap<String, Date> workingdaymap = new HashMap<String, Date>();

    Set<String> values1 = new HashSet<String>(employeeMap.values());
    Set<String> values2 = new HashSet<String>(workingdaymap.values());
    boolean equal = values1.equals(value2);
于 2012-05-30T09:30:18.527 に答える
2

Values Date オブジェクトですか? その場合、オブジェクトの値ではなく、マップに同じオブジェクトが含まれているかどうかを確認しようとしています(両方のマップにまったく同じインスタンスを保存しない限り、ハッシュは異なります)。

于 2012-05-30T09:12:08.913 に答える
0

以下は完全に機能するコードです。比較が失敗した理由は、マップ値が異なるためです。

Key : 27 : Value : 27/4/2012, Key : 1_18 : Value : 27/04/2012

日付を見ると、違いがはっきりとわかります。 文字列として保存して27/4/2012からとは異なり ます。27/04/2012

Iterator<Map.Entry<String,String>> holyDayiterator = workingdayMap.entrySet().iterator();

                 while (holyDayiterator.hasNext()) {
                    Map.Entry holiDayEntry = holyDayiterator.next();
                    if(!employeeMap.containsValue((holiDayEntry.getValue()))){
                        System.out.println("works perfect");
                    }

皆さんのサポートと投票を断念してくれた人々にも感謝します。

:)トニー

于 2012-05-30T12:21:59.370 に答える