Lambda表达式和SteamAPI
Lambda表达式和SteamAPI是JDK8的新特性,所有在实验下面代码时候,请升级JDK到8版本,否则会编译 报错。
首先看Lambda表达式,同正则表达式类似,Lambda表达式不能在JAVA代码中直接使用,先得做一下封装。
import java.util.ArrayList;
public class LabExamp {
/**
* Lambda表达式(λ表达式)可见有三部分组成:参数列表,箭头(->),以及一个表达式或语句块。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//Runnable r1=(x,y)->{return x+y;};
ArrayList<Student> list=new ArrayList<Student>();
Student std1=new Student();
std1.setId(1);
std1.setName("小王");
list.add(std1);
Student std2=new Student();
std2.setId(2);
std2.setName("小张");
list.add(std2);
// list.forEach(o -> {System.out.println(o);});
// list.forEach(o -> ((Student) o).getName()); //如果省略ArrayList的类型声明,则必须这么写强制转型
list.forEach(stu -> {System.out.println( stu.getName());});
for(Student o: list) { // 外部迭代
System.out.println(o.getName());
}
}
}
---------------------------------------------------------------------------
public class Student {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
上面例子中可以看出,Lambda表达式跟for循环的代码效果是一样的,但是用Lambda表达式更加简洁。
接着是SteamAPI,
Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。
import java.util.ArrayList;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class SteamExamp {
/*
*
* Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。
* 同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,
* 使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错,
* 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。
*/
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<Student>();
Student std1=new Student();
std1.setId(1);
std1.setName("小王");
list.add(std1);
Student std2=new Student();
std2.setId(2);
std2.setName("小张");
list.add(std2);
Student std6=new Student();
std6.setId(6);
std6.setName("小刘");
list.add(std6);
Student std3=new Student();
std3.setId(3);
std3.setName("小李子");
list.add(std3);
// ArrayList<Student> transactionsIds = list.parallelStream().
// filter(t -> t.getType() == Transaction.GROCERY).
// sorted(comparing(Transaction::getValue).reversed()).
// map(Transaction::getId).
// collect(toList());
ArrayList<Integer> transactionsIds = (ArrayList<Integer>) list.parallelStream().
sorted((p1, p2) -> p1.getId().compareTo(p2.getId())).
map(Student::getId).
collect(Collectors.toList());
ArrayList<Integer> transactionsIds2 = (ArrayList<Integer>) list.parallelStream().
sorted((p1, p2) -> p2.getId().compareTo(p1.getId())).
map(Student::getId).
collect(Collectors.toList());
System.out.println(transactionsIds);
System.out.println(transactionsIds2);
//流的数据源不一定是一个已存在的集合对象,也可能是个“生成器函数”。一个生成器函数会产生一系列元素,供给一个流。
//Stream.generate(Supplier<T> s)就是一个生成器函数。其中参数Supplier是一个函数接口,里面有唯一的抽象方法 <T> get()。
Stream.generate(Math::random).limit(5).forEach(System.out::println);
}
}
----------------------------------------------------
上例输出结果可能是:
[1, 2, 3, 6]
[6, 3, 2, 1]
0.10556146349285433
0.08263394346689457
0.13330880751987728
0.05459269439895098
0.055821882208000884
=======================================================
上面程序的例子就是使用了SteamAPI实现了ArrayList正序和逆序的排列。最后一段是如何产生应该5个元素的随机数列。简单说,对 Stream 的使用就是实现一个 filter-map-reduce 过程,产生一个最终结果,或者导致一个副作用(side effect)。Java8引入Steam概念的目标是配合“集合类批处理操作”的内部迭代和并行处理。
Lambda表达式和SteamAPI相关推荐
- Lambda 表达式基础理论与示例
Lambda 表达式基础理论与示例 Lambda 表达式,也可称为闭包,推动 Java 8 发布的最重要新特性. Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中). 使用 Lam ...
- lambda表达式树
一.定义: 表达式树又称为表达式目录树,以数据形式表示语言级代码.所有的数据都存储在树结构中,每个结点表示一个表达式(Expression). 二.要点: –Lambda表达式的参数类型可以忽略,因为 ...
- java 8 lambda reduce_JDK8新特性Lambda表达式体验
"Lambda 表达式"(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstra ...
- java saf_Java 8 Lambda表达式探险
为什么? 我们为什么需要Lambda表达式 主要有三个原因: > 更加紧凑的代码 比如Java中现有的匿名内部类以及监听器(listeners)和事件处理器(handlers)都显得很冗长 &g ...
- lamda表达式python_Python--13 lambda表达式
python 允许使用lambda表达式来创建匿名函数 lambda表达式 >>>def ds(x): ... return 2 * x +1 ... >>> ds ...
- C++11:Lambda表达式(匿名函数)理解
C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象.即你可以理解为(Lambda 表达式实际上是一个函数,只是它没 ...
- java8 lambda 表达式详解
lambada 表达式实质上是一个匿名方法,但该方法并非独立执行,而是用于实现由函数式接口定义的唯一抽象方法 使用 lambda 表达式时,会创建实现了函数式接口的一个匿名类实例 可以将 lambda ...
- Java8中Lambda表达式的10个例子
Java8中Lambda表达式的10个例子 例1 用Lambda表达式实现Runnable接口 Java代码 //Before Java 8: new Thread(new Runnable() ...
- 【读书笔记】Lambda表达式
Lambda表达式,是一个匿名函数,它可以包含表达式和语句,并且可用于创建委托或表达式目录树类型. Lambda表达式, 都是用"=>"运算符. 读作"goes t ...
最新文章
- Python相关机器学习‘武器库’
- 系统异常捕捉处理设计文档
- strncmp函数——比较特定长度的字符串
- 在RHEL5.4上做YUM
- IDEA 创建 SpringCloud项目-多项目方式
- 百度云2019落地第一枪打响:两款智能边缘硬件,让城市环卫、农药喷洒都AI起来...
- smtplib,发送邮件时的bug
- mqttfx连接emq_云服务器上MQTT:EMQ服务搭建使用教程
- mysql常见函数的实列
- jqGrid添加详细按钮,单击弹出窗体
- 大学python教材课后答案_大学慕课2020年Python编程基础课后答案
- 前后端分离php还有优势,前后端分离优缺点
- 如何在你朋友面前伪装黑客7(程序代码)
- bzGhost打造跨平台即时聊天软件之专栏介绍
- Mac—Homebrew安装与使用
- FM(Factorization Machine)因式分解机 与 TensorFlow实现 详解
- uniapp 电子印章_初探uni-app框架 踩坑
- Navicat12 过期了怎么办
- 人工智能有多吃香?人工智能岗位薪资水平曝光(附赠37G学习资料大礼包)
- IPM 鸟瞰图公式转换与推导