Ответ 1
В Java 8 вы можете проверить, что не все списки пустые.
boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
Учитывая Map
, сопоставляя String с List
, есть ли способ использовать Java-потоки, чтобы вернуть логическое значение, где ИСТИНА означает, что один или несколько элементов списка имеют элементы? Если все списки на карте пусты, верните FALSE.
Map< String , List<String> > map = …
Может ли использование Streams заменить этот обычный код?
// See if any diffs were found. Loop through the Map, look at each List of diffs to see if non-empty.
boolean anyElementsInAnyList = false;
for (List<String> list : map.values () ) {
if (!list.isEmpty()) {
anyElementsInAnyList = true;
break;
}
}
Обратите внимание, что после первого обнаружения мы можем выйти из экзамена. Не нужно проверять все значения карты (все списки). Было бы неплохо, если бы для эффективности Stream мог выполнять ту же самую остановку-на-первом поиске (операция "короткого замыкания" ).
В Java 8 вы можете проверить, что не все списки пустые.
boolean anyNonEmpty = !map.values().stream().allMatch(List::isEmpty);
Используйте метод anyMatch
, который находит, если какой-либо элемент потока соответствует Predicate
. Здесь ваш предикат состоит в том, что значение записи (список) не пусто.
boolean anyNonEmpty = map.entrySet()
.stream()
.anyMatch(entry -> !entry.getValue().isEmpty());
int size = Map.entrySet().stream()
.map(entry -> entry.getValue())
.flatMap(list -> list.stream())
.size();
if(size==0)
return Boolean.False;
else
return Boolean.True;
Этот код является простым, что может помочь в вашей работе.