On Tuesday, June 4, 2013 7:56:24 PM UTC+2, clay wrote:
>
> What do you want in "exists" and "forAll" that can't be done with the 
> current "isPresent" and "forEach"?
>

First of all, to achieve anything similar with isPresent/forEach (isPresent 
is now called forEach) you have to code with side effects (it takes a 
lambda with a void return type), where the lambda you pass in have to 
mutate a boolean variable or something similar. It will be more code, and 
more error prone.

Second, the exists and forAll has different meanings, depending 
on whether you have a some or a none, for example:

Some(1).forAll(i -> i%2 == 0) returns false
Some(1).exists(i -> i%2 == 0) return false

Some(2).forall(i -> i%2 == 0) returns true
Some(2).exists(i -> i%2 == 0) return true

None.exists(i -> i%2 == 0) returns false
None.forall(i -> i%2 == 0) returns true

It is nice to have when doing validation for example, where you allow a 
field to be unset, but if it is set, it has to follow a certain rule, or 
the opposite, where you require something to be be Some (in one context) 
and validate according to a method. Let's say you have a Customer object, 
where the e-mail is Optional, but if it is some, then you want it to be a 
valid e-mail (good use case for forall). The same Customer object might 
have a phone number, which is mandatory, but represented by a Optional, as 
your legacy customer db don't have telephone numbers for all customers 
(good use case for exists).

-- 
You received this message because you are subscribed to the Google Groups "Java 
Posse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/javaposse?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to