JAVA必知必会

lambda

Thread

代码块JAVA · 9 行收起展开
//匿名内部类写法
new Thread(new Runnable(){
	@Override
	public void run(){
		...
	}
}).start();

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

函数式接口

即只有一个方法的接口

代码块JAVA · 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>接口

代码块JAVA · 2 行收起展开
s->Integer.parseInt(s);  //Integer::parseInt;
i->String.valueOf(i);  //String::valueOf

lambda的map

代码块JAVA · 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

代码块JAVA · 3 行收起展开
list.stream()
	.filter(x->!x.isEmpty()) //true才保留
	.collect(Collectors.toList());

flatMap+distinct