新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算
传统程序员4大本领:泛型,枚举,反射,注解
新时代的程序员4大本领:lambda表达式,链式编程,函数式接口,Stream流式计算
1.lambda表达式
// 1. 不需要参数,返回值为 5
() -> 5
// 2. 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x
// 3. 接受2个参数(数字),并返回他们的差值
(x, y) -> x – y
// 4. 接收2个int型整数,返回他们的和
(int x, int y) -> x + y
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)
(String s) -> System.out.print(s)
- 链式编程
可以简化编程,代码简洁
它允许将多个函数或操作连接在一起,形成一个链条,以执行复杂的操作
String sb=new StringBuilder().append("hello").append("world").toString();
- 函数式接口:FunctionaInterfae 只有一个方法的接口 Runable,Function
作用:简化编程模型,在新版本的框架底层大量应用
//Function 有输入输出参数
Function function=new Function<String,String>(){
@Override
public String apply(String str){
return str;
}
}
Function<String,String> function=(str)->{return str;};
function.apply("hello");
//断定型接口Predicate:有一个输入参数,只返回bool
Predicate<String> predicte=(str)->{return str.isEmpty();};
//消费型接口Consumer:只有输入,没有输出
Consumer consumer=(str)->{System.out.print{"hello");};
4.stream流计算
User u1=new User(1,"a",21);
User u2=new User(2,"b",22);
User u3=new User(3,"c",23);
User u4=new User(4,"d",24);
//集合是存储数据
List<User> list=Array.asList(u1,u2,u3,4u);
//计算交给stream流
> //lambda 表达式,链式编程,函数式接口,Stream流式计算
> //找出用户id为偶数,年龄大约23岁,用户名转为大写字母,用户名倒序,输出1个用户的查询
> list.stream()
.filter(u->{return u.getId() % 2 ==0;})
.filter(u->{return u.getAge() >23;})
.map(u->{return u.getName().toUpterCase();})
.sorte((uu1,uu2)->{return uu2.compareTo(uu1);})
.limit(1)
.forEach(System.out::printIn);
//并行流 比for计算快100倍,比forkjoin快80倍
long start=System.currentTimeMillis();
long sum=LongStream.rangeClosed(0L,1_0000_0000L).parallel().reduce(0,Long::sum);
long end=System.currentTimeMillis();
System.out.printIn("time:"+(end-start));
Java中对于流式计算的实现
所在包: java.util.stream
应用场景:主要是对 集合数据 进行操作,其很多操作方法和sql的作用和类似,把 list 转成 流对象,目的是为了使用流的方法 => 这样就可以处理一些比较复杂的业务
常用的一些方法:
filter(对数据进行过滤)
map(对数据进行映射操作)
limit(限制数据条数)
count(求取数据量)
sorted(排序)
collect (收集集合)
- 异步回调CompletableFuture
//有返回值的回调
ComletableFuture<Integer> com=ComletableFuture.suppLyAsync(()->{return 1024;});
//没有返回值的回调