在使用 Java 8 流时,我经常发现我需要重构一个多语句 lambda 表达式。我将用一个简单的例子来说明这一点。假设我已经开始编写这段代码:
Stream.of(1, 3).map(i -> {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
}).forEach(System.out::println);
现在我不太喜欢map
调用中的大 lambda 表达式。因此,我想从那里重构它。Function
我看到两个选项,或者我在我的班级中创建一个实例:
private static Function<Integer, String> mapper = i -> {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
};
并像这样使用它:
Stream.of(1, 3).map(mapper).forEach(System.out::println);
或者我只是制作一个方法:
private static String map(Integer i) {
if (i == 1) {
return "I";
} else if (i == 3) {
return "E";
}
return "";
}
并使用方法参考:
Stream.of(1, 3).map(Test::map).forEach(System.out::println);
除了明显的口味问题之外,这两种方法有什么优点或缺点吗?
例如,我知道堆栈跟踪在方法参考案例中变得更具可读性,这是一个小优势。