// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.abicheck.setmatcher; import java.util.HashSet; import java.util.Set; import java.util.function.Consumer; import java.util.function.Predicate; import static java.util.function.Predicate.not; public class SetMatcher { public static boolean compare(Set expected, Set actual, Predicate itemsMatch, Consumer onMissing, Consumer onExtra) { boolean mismatch = false; Set missing = new HashSet<>(expected); missing.removeIf(actual::contains); for (T item : missing) { mismatch = true; onMissing.accept(item); } Set extra = new HashSet<>(actual); extra.removeIf(expected::contains); for (T item : extra) { mismatch = true; onExtra.accept(item); } Set both = new HashSet<>(actual); both.removeIf(not(expected::contains)); for (T item : both) { if (!itemsMatch.test(item)) { mismatch = true; } } return !mismatch; } }