使用 Optional
public class OptExample {
// 从配置中获取文件名,可能没有
static Optional<String> getFilename() {
return Optional.empty();
}
// 打开文件,可能打开失败
static Optional<File> openFile(String name) {
return Optional.empty();
}
// 打开文件,文件中的数据格式可能不正确
static Optional<List<String>> getData(File file) {
return Optional.empty();
}
// 解析数据,数据可能不完整
static Optional<Map<String, Integer>> parseData(List<String> data) {
return Optional.empty();
}
// 可能出现计算异常
static Optional<Integer> average(Map<String, Integer> map) {
return Optional.empty();
}
public static void main(String[] args) {
int avg = getFilename()
.flatMap(OptExample::openFile)
.flatMap(OptExample::getData)
.flatMap(OptExample::parseData)
.flatMap(OptExample::average)
.orElseThrow(() -> new RuntimeException("无法执行"));
System.out.println(avg);
}
}
不使用 Optional
public class NormalExample {
static String getFilename() {
return null;
}
static File openFile(String name) {
return null;
}
static List<String> getData(File file) throws IOException {
return null;
}
static Map<String, Integer> parseData(List<String> data) {
return null;
}
static Integer average(Map<String, Integer> map) {
return null;
}
static void exception() {
throw new RuntimeException("执行错误");
}
public static void main(String[] args) {
String filename = getFilename();
if (filename == null) {
exception();
}
File file = openFile(filename);
List<String> data = null;
try {
data = getData(file);
} catch (IOException ex) {
exception();
}
if (data == null) {
exception();
}
Map<String, Integer> map = parseData(data);
if (map == null) {
exception();
}
Integer avg = average(map);
if (avg == null) {
exception();
}
System.out.println(avg);
}
}
来源:oschina
链接:https://my.oschina.net/reter/blog/4283372