public static <T> boolean listsEquivalent(List<T> list1, List<T> list2) {
        if (list1 == null) {
            return list2 == null;
        }
        if (list2 == null) {
            return false;
        }

        for (T t : list1) {
            if (!list2.contains(t)) {
                return false;
            }
        }
        for (T t : list2) {
            if (!list1.contains(t)) {
                return false;
            }
        }

        return true;
    }