1

I can understand the below:

user
  .filter(u -> "Sam".equals(u.getName()))
  .ifPresent(this::doSomethingWithUser);

if user.getName is equal to "Sam" then pass user to local method doSomethingWithUser().

However, what if I simply wanted to call a local method, without passing user but keeping the check that user.getName is equal to "Sam"?

Does this use case make using Optional redundant?

notAChance
  • 1,360
  • 4
  • 15
  • 47

2 Answers2

4

Just ignore the mandatory function parameter. This means you cannot use shorthand :: syntax and goes like this:

user
  .filter(u -> "Sam".equals(u.getName()))
  .ifPresent(u -> doSomethingWithoutUser());
drekbour
  • 2,895
  • 18
  • 28
  • 1
    Interesting question... I've posted it here: https://stackoverflow.com/questions/58734350/is-adapting-a-no-arg-method-into-a-consumer-bad-form – drekbour Nov 06 '19 at 16:14
  • Sure, to fix the incorrect comment. I meant converting a *`Consumer` into a `Runnable`*. Not sure how effective or good of a practice is it!! – Naman Nov 06 '19 at 16:32
1

You can just check for the presence of the Optional for such case:

if(user.filter(u -> "Sam".equals(u.getName()).isPresent()) {
    // call your method without user
}
Naman
  • 27,789
  • 26
  • 218
  • 353