私はこれら2つのオブジェクトを持っています。2つのHashMapの内容をset <>の値と比較する
public Map<String, Set<RuleConditionBl>> countryToNonSplittedRules1 = new HashMap<>;
public Map<String, Set<RuleConditionBl>> countryToNonSplittedRules2 = new HashMap<>;
私はこれらの2
を比較するテストを持っており、その内容が同じであっても、私は
countryToNonSplittedRules1.equals(countryToNonSplittedRules2);
のための偽の取得ここでは一例です:
Iこのpostを読んで、私はわからないではない、このリターンtrue
public class RuleConditionBl {
public int weight;
public boolean isAll;
public List<String> countries;
public UserFlag userFlag;
@JsonIgnore
private Range<LocalDate> datesRange;
public String fromDate;
public String toDate;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
RuleConditionBl that = (RuleConditionBl) o;
if (weight != that.weight) return false;
if (isAll != that.isAll) return false;
if (countries != null ? !countries.equals(that.countries) : that.countries != null) return false;
if (userFlag != that.userFlag) return false;
return datesRange != null ? datesRange.equals(that.datesRange) : that.datesRange == null;
}
@Override
public int hashCode() {
// int result = weight;
int result = 0;
result = 31 * result + (isAll ? 1 : 0);
result = 31 * result + (countries != null ? countries.hashCode() : 0);
result = 31 * result + (userFlag != null ? userFlag.hashCode() : 0);
result = 31 * result + (datesRange != null ? datesRange.hashCode() : 0);
return result;
}
{
あなたのスクリーンショットでは観察できない1つのことは、各国が等しいことは確かですか?デバッグを簡単にするために:良いtoString()を追加して、両方のマップの内容を出力してみませんか? – GhostCat
他の質問を削除したのはなぜですか? **再び**、重みは 'hashCode'に含まれるべきです。 – Michael
'UserFlag'インスタンスと' userFlag!= that.userFlag'を比較してはいけません(両方ともあなたの例ではnullと表示されているので、結果には影響しません)。 equalsを使用する – Eran