Skip to content

Commit f7aca5d

Browse files
committed
Lambda作用域
1 parent f295318 commit f7aca5d

File tree

3 files changed

+55
-7
lines changed

3 files changed

+55
-7
lines changed

src/main/java/com/xu/java8/lambda/InterfaceT.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ public double calculate(int a) {
3535
System.out.println(formula1.sqrt(-23));
3636
System.out.println(Formula.positive(-4));
3737

38+
/**Lambda表达式不能使用默认方法,无法编译*/
39+
//Formula formula = (a) -> sqrt( a * 100);
3840
}
3941
}
4042

src/main/java/com/xu/java8/lambda/Lambda4.java

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.xu.java8.lambda;
22

33
/**
4-
* Class Lambda作用域。
4+
* Class Lambda作用域。访问局部变量,对象字段与静态变量
55
*
66
* @author hua xu
77
* @version 1.0.0
@@ -17,29 +17,39 @@ public class Lambda4 {
1717
int outerNum;
1818

1919
void testScopes() {
20+
21+
/**变量num可以不用声明为final*/
2022
int num = 1;
2123

24+
/**可以直接在lambda表达式中访问外层的局部变量*/
2225
Lambda2.Converter<Integer, String> stringConverter =
2326
(from) -> String.valueOf(from + num);
24-
2527
String convert = stringConverter.convert(2);
2628
System.out.println(convert); // 3
29+
/**但是num必须不可被后面的代码修改(即隐性的具有final的语义),否则编译出错*/
30+
//num=3;
2731

32+
/**lambda内部对于实例的字段以及静态变量是即可读又可写*/
2833
Lambda2.Converter<Integer, String> stringConverter2 = (from) -> {
2934
outerNum = 13;
30-
return String.valueOf(from);
35+
return String.valueOf(from + outerNum);
3136
};
37+
System.out.println(stringConverter2.convert(2));
38+
System.out.println("\nBefore:outerNum-->"+outerNum);
39+
outerNum=15;
40+
System.out.println("After:outerNum-->"+outerNum);
3241

3342
String[] array = new String[1];
3443
Lambda2.Converter<Integer, String> stringConverter3 = (from) -> {
35-
array[0] = "Hi there";
44+
array[0] = "Hi here";
3645
return String.valueOf(from);
3746
};
38-
3947
stringConverter3.convert(23);
40-
41-
System.out.println(array[0]);
48+
System.out.println("\nBefore:array[0]-->"+array[0]);
49+
array[0] = "Hi there";
50+
System.out.println("After:array[0]-->"+array[0]);
4251
}
52+
4353
public static void main(String[] args) {
4454
new Lambda4().testScopes();
4555
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.xu.java8.lambda;
2+
3+
import java.util.HashMap;
4+
import java.util.function.BiConsumer;
5+
6+
/**
7+
* Class description
8+
*
9+
* @author hua xu
10+
* @version 1.0.0
11+
* @date 16/08/31
12+
*/
13+
public class Lambda5 {
14+
public static void main(String... args) {
15+
16+
//BiConsumer Example
17+
BiConsumer<String,Integer> printKeyAndValue
18+
= (key,value) -> System.out.println(key+"-"+value);
19+
20+
printKeyAndValue.accept("One",1);
21+
printKeyAndValue.accept("Two",2);
22+
23+
System.out.println("##################");
24+
25+
//Java Hash-Map foreach supports BiConsumer
26+
HashMap<String, Integer> dummyValues = new HashMap<>();
27+
dummyValues.put("One", 1);
28+
dummyValues.put("Two", 2);
29+
dummyValues.put("Three", 3);
30+
31+
dummyValues.forEach((key,value) -> System.out.println(key+"-"+value));
32+
33+
}
34+
}
35+
36+

0 commit comments

Comments
 (0)