В настоящее время я занимаюсь проблемой преобразования циклов, которые используют побитовые операции с использованием Lambdas в Java 8.
Учитывая набор сложных записей, требуется, чтобы цикл пересекал ВСЕ записи и вызывал на них заданный метод (метод возвращает логическое значение). Затем верните результат.
Другими словами, мне нужно вызвать метод для всех записей и сохранить результат. Причина в том, что каждая запись независимо выполняет сложную операцию и должна выполняться. Конечный результат представляет собой комбинацию результатов.
Фрагмент кода:
boolean areAllSuccessful = true;
for (SomeEntry entry : entries) {
areAllSuccessful = areAllSuccessful & entry.doComplexAction(); // keep calling the method on other entries regardless of the result.
}
return areAllSuccessful;
Проблема в том, что функции лямбда в Java 8 обычно выполняют операции короткого замыкания (как только ложная запись обнаружена, "цикл" ломается, и возвращается ложный результат).
Мое лучшее решение до сих пор заключалось в использовании комбинации карт/фильтров/счетчиков:
return entries
.stream()
.map(entry -> entry.doComplexAction())
.filter(result -> result == false)
.count() > 0
Есть ли более умный/чистый способ сделать это?
Спасибо!