package lambdasinaction.chap10; import org.junit.*; import java.util.*; import static java.util.Optional.*; import static org.junit.Assert.assertEquals; public class ReadPositiveIntParam { @Test public void testMap() { Properties props = new Properties(); props.setProperty("a", "5"); props.setProperty("b", "true"); props.setProperty("c", "-3"); assertEquals(5, readDurationImperative(props, "a")); assertEquals(0, readDurationImperative(props, "b")); assertEquals(0, readDurationImperative(props, "c")); assertEquals(0, readDurationImperative(props, "d")); assertEquals(5, readDurationWithOptional(props, "a")); assertEquals(0, readDurationWithOptional(props, "b")); assertEquals(0, readDurationWithOptional(props, "c")); assertEquals(0, readDurationWithOptional(props, "d")); } public static int readDurationImperative(Properties props, String name) { String value = props.getProperty(name); if (value != null) { try { int i = Integer.parseInt(value); if (i > 0) { return i; } } catch (NumberFormatException nfe) { } } return 0; } public static int readDurationWithOptional(Properties props, String name) { return ofNullable(props.getProperty(name)) .flatMap(ReadPositiveIntParam::s2i) .filter(i -> i > 0).orElse(0); } public static Optional<Integer> s2i(String s) { try { return of(Integer.parseInt(s)); } catch (NumberFormatException e) { return empty(); } } }