I wrote some lambda expression which adds some values to the map based on methods which return optionals. I would like to throw some specyfic exception when there is no value under key "A". I'm checking the map using contains But it looks terrible :| I was trying to use orElseThrow but without good results.
Any hints?
Here is some sample code:
package com.aa;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import com.aa.SomeExpection;
public class SomeCLass
{
Optional<String> methodA()
{
return Optional.empty();
}
Optional<String> methodB() {
return Optional.of("example");
}
Map methodC() throws SomeExpection {
Map<String, String> map = new HashMap<>(2);
methodA().flatMap(s -> {
map.put("A", s);
return methodB();
}).ifPresent(s -> map.put("B", s));
if (map.containsKey("A")) {
return map;
}
throw new SomeExpection();
}
}
This is equivalent
Map methodC() throws SomeException {
Map<String, String> map = new HashMap<>(2);
map.put("A", methodA().orElseThrow(SomeException::new));
methodB().ifPresent(s -> map.put("B", s));
return map;
}