package com.github.java8.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();
}
}
}