JAVA必知必会

lambda

Thread

1
2
3
4
5
6
7
8
9
//匿名内部类写法
new Thread(new Runnable(){
@Override
public void run(){
...
}
}).start();

new Thread( ()-> sout).start();

函数式接口

即只有一个方法的接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@FunctionalInterface
public interface FI{
void test(String name);
}

//匿名内部类写法
FI fi = new FI(){
@Override
public void test(String name){
...
}
}

//lambda表达式
FI fi = (name)->name.sout;
//可以写成 传入name且用name --> System.out::println

comsumer & supplier

数据转换

Function<K, V>接口

1
2
s->Integer.parseInt(s);  //Integer::parseInt;
i->String.valueOf(i); //String::valueOf

lambda的map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//第六种---lambda的map使用
//不使用Lambda表达式为每个订单加上12%的税
var costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);

for (Integer cost : costBeforeTax) {
double price = cost + .l2*cost;
System.out.println(price);

//使用ambda的map
costBeforeTax.stream()
.map((cost) -> cost+.12*costx.forEach(System.out::println);
}

//reduce
//为每个订单加上12%的税1 老方法:
double total = 0;
for (Integer cost : costBeforeTax)
{double price = cost + .12*cost;
total = total + price;
System.out.println("Total :" + total);

//新方法:
double bill =
costBeforeTax.stream()
.map((cost) -> cost + .l2*cost)
.reduce((sum, cost) ->Isum + cost)
.get();
System.out.println("Total : " + bill);

filter

1
2
3
list.stream()
.filter(x->!x.isEmpty()) //true才保留
.collect(Collectors.toList());

flatMap+distinct