Java Lambda Expression for if condition - not expected here -
consider case if condition needs evaluate array or list. simple example: check if elements true. i'm looking generic way it
normally i'd that:
boolean alltrue = true; (boolean bool : bools){ if (!bool) { alltrue = false; break; } } if (alltrue){ // }
but i'd hide if condition. tried using lambda expressions this, it's not working:
if (() -> { (boolean bool : bools) if (!bool) return false; return true; }){ // }
if working more complicated like
if (() -> { int number = 0; (myobject myobject : myobjects) if (myobject.getnumber() != 0) numbers++; if (numbers > 2) return false; return true; }{ //do }
is there better way syntax error?
update i'm not talking boolean array, rather looking generic way achieve that.
you can write, given instance list<boolean>
:
if (!list.stream().allmatch(x -> x)) { // not every member true }
or:
if (list.stream().anymatch(x -> !x)) { // @ least 1 member false }
if have array of booleans, use arrays.stream()
obtain stream out of instead.
more generally, stream
providing elements of (generic) type x
, have provide predicate<? super x>
.{all,any}match()
(either "full" predicate, or lambda, or method reference -- many things go). return value of these methods self explanatory -- think.
now, count elements obey predicate, have .count()
, can combine .filter()
-- also takes (whatever is) predicate
argument. instance checking if have more 2 elements in list<string>
length greater 5 you'd do:
if (list.stream().filter(s -> s.length() > 5).count() > 2l) { // yup... }
Comments
Post a Comment