Предположим, что у меня массив огромный Boolean
flags
:
Boolean[] flags = { true, false, true }; // 3 means "many"
Я хочу сделать две вещи на flags
:
- проверьте, все ли элементы
true
и возвращают индикатор; - reset все элементы
false
.
Используя лямбда-выражение Java 8, я могу сделать это следующим образом:
indicator = Arrays.stream(flags).allMatch(flag -> flag);
Arrays.stream(flags).forEach(flag -> flag = false);
return indicator;
Однако эта реализация сканирует flags
дважды. Поскольку flags
огромен, я не хочу этого. Кроме того, я предпочитаю лямбда-способ. Есть ли способ реализации этой семантики checkIfAllTrueAndReset
с (однострочным) лямбда-выражением, которое сканирует flags
только один раз?
Связано, но не одно и то же: Каков самый элегантный способ проверить, истинны ли все значения в булевом массиве?
Примечание: Я многому учусь из комментариев и ответов. Спасибо всем!
-
Stream
классный, но это не для этого. -
BitSet
(и его бит-разумно атомный аналогAtomicBitSet
) более подходит для этого (так принято, как ответ, спасибо другим). - Побочные эффекты в
map
(Stream
или вообще функциональное программирование) обескуражены. -
Arrays.stream(flags).forEach(flag -> flag = false)
(в моем коде) ничего не задает!