直接贴代码(需要借助 Guava 类库):
String[] array = {"a", "b", "c"};
for(Integer i : Lists.newArrayList(1, 2, 3)){
Stream.of(array).map(item ->
//Strings.padEnd 方法将 item 使用给定的 char 将字符串补全到长度 i
Strings.padEnd(item, i, '@')).forEach(System.out::println);
}
String[] array = {"a", "b", "c"};
for(int i = 1; i < 4; i++){
Stream.of(array).map(item ->
//这里编译报错
Strings.padEnd(item, i, '@')).forEach(System.out::println);
}
查了一下,觉得可能是因为变量 i 被 lambda 表达式引用,所以编译器会隐式的将其当做 final 来处理。
但是为什么第一个不会报错,而第二个会报错呢?
侃侃无极
相关分类