使用 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);
现在我不太喜欢大的 lambda 表达式map
称呼。因此,我想从那里重构它。我看到两个选项,要么我举个例子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);
除了明显的品味问题之外,这两种方法还有什么优点或缺点吗?
例如,我知道堆栈跟踪在方法引用情况下变得更具可读性,这是一个小优势。