(Поскольку вы не указали явно тип данных элементов массива, я предполагаю, что это File
, выведенное из комментариев.)
Если вы не возражаете против преобразования между структурами данных, возможно, преобразование ваших массивов (временно) в коллекции является наиболее простым способом. Например, преобразование в List
:
/* @param other
* @return true if the calling object contains
* all files in the parameter object, false otherwise
*/
public boolean contains(FileCollection other) {
List<File> myList = Arrays.asList(this.files);
List<File> otherList = Arrays.asList(other.files);
return myList.containsAll(otherList);
}
Исходя из того, что вы пояснили, что следует считать "содержащим", когда разрешены дублирующиеся элементы, я бы сказал, что вам нужно посчитать количество существования для каждого элемента. Вот как:
Основываясь на ответе @Eritrean, вы можете получить и сохранить счет на карте. Я сделал изменения, чтобы проверить счет тоже:
public boolean contains(FileCollection other) {
Map<File,Integer> otherFrequency = Arrays.stream(other.files)
.collect(Collectors.toMap(Function.identity(), v->1,Integer::sum));
Map<File,Integer> thisFrequency = Arrays.stream(this.files)
.collect(Collectors.toMap(Function.identity(), v->1,Integer::sum));
if (thisFrequency.entrySet().containsAll(otherFrequency).entrySet()) {
for (File entry : otherFrequency.entrySet()) {
if (thisFrequency.get(entry) < otherFrequency.get(entry))
return false;
}
return true;
}
return false;
}