java8的相关特性
1,为什么要介绍java8的相关特性?
因为现在的企业大部分已经从java7向java8开始迈进了,用java8的公司越来越多了,java8中的一些知识还是需要了解一些的;
java8具有以下特点:
速度更快(底层的数据结构做了一些更新和改动,垃圾回收机制内存结构做了一些改动)
代码更少(增加了新的语法 Lambda 表达式)
强大的 StreamAPI
便于并行
最大化减少空指针异常(Optional 容器类)
主要内容:
1、Lambda 表达式
2、函数式接口
3、方法引用与构造器引用
4、StreamAPI
5、接口中的默认方法与静态方法
6、新时间日期 API
7、其他新特性
一,Lambda表达式
什么是lambda表达式?
Lambda 表达式是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的
代码风格,使得 Java 语言表达能力得到了提升。Java8 中引入了一个新的操作符”->”该操作符称为箭头操作符或 Lambda 操作符,箭头操作符将 Lambda 表达式拆分为两部分:
左侧:Lambda 表达式的参数列表。对应接口中抽象方法的参数列表。右侧:Lambda 表达式中所需要执行的功能,即 Lambda 体。对应接口中抽象方法的实现。
Lambda 表达式的基础语法
public class Java8Test {
/*
无参数,无返回值
* */
@Test
public void test01(){
Runnable r=new Runnable() {
@Override
public void run() {
System.out.println("liuqingfeng");
}
};
r.run();
System.out.println("****************");
Runnable r2= () -> System.out.println("hello lambda!");
r2.run();
}
//有一个参数,无返回值
@Test
public void test02(){
Consumer<String> con=(t) -> System.out.println(t);
con.accept("1");
}
//只有一个参数,小括号可以省略不写
@Test
public void test03(){
Consumer<String> con= t -> System.out.println(t);
con.accept("2");
}
//有两个以上的参数 ,有返回值 , 并且Lambda体中有多条语句
@Test
public void test04(){
Comparator<Integer> com=(x,y) ->{
System.out.println("hello world");
Integer a=Integer.compare(x,y);
System.out.println(a);
return a;
};
int i = com.compare(8, 4);
System.out.println(i);
}
//若Lambda体中只有一条语句,return 和大括号都可以省略不写
@Test
public void test05(){
Comparator<Integer> com = (x,y) -> Integer.compare(x,y);
System.out.println(com.compare(1,2));
}
//Lambda 表达式的参数列表的数据类型可以省略不写,因为 JVM 编译器通过上下文推断出
//数据类型,即“类型推断”
@Test
public void test06(){
Comparator<Integer> com = (Integer x, Integer y) -> Integer.compare(x, y);
show(new HashMap<>());// jdk1.8 以后
}
public void show(Map<String, Integer> map) {
}
//使用函数式接口
@Test
public void test7() {
Integer result = operation(100, (x) -> x * x);
System.out.println(result);
result = operation(200, (y) -> y - 100);
System.out.println(result);
}
public Integer operation(Integer num, MyFunction<Integer> mf) {
return mf.getValue(num);
}
@FunctionalInterface
public interface MyFunction<T> {
public T getValue(T o);
}
}
二,四大内置核心函数式接口
public class test8_02 {
/*
* Consumer<T> 消费型接口
* void accept(T t);
*/
@Test
public void test01(){
happy(10000,(m)->System.out.println("杜立宏要去大保健"));
}
public void happy(double money, Consumer<Double> con){
con.accept(money);
}
//供给型接口
@Test
public void test02(){
List<Integer> numlist=getNumList(10,()->(int)(Math.random()*100));
System.out.println(numlist.toString());
}
public List<Integer> getNumList(int num,Supplier<Integer> sup){
List<Integer> list=new ArrayList<>();
for(int i=0;i<num;i++){
list.add(sup.get());
}
return list;
}
//函数型接口
@Test
public void test03(){
String newStr=strHandler(" shsxt ",(str)->str.trim());
System.out.println(newStr);
System.out.println("**********************");
newStr=strHandler("bjsxt",(str)->str.substring(1,3));
System.out.println(newStr);
}
public String strHandler(String str, Function<String,String> fun){
return fun.apply(str);
}
//断言型接口
@Test
public void test04(){
List<String> list= Arrays.asList("hello","world","123","ok","God");
list= stringFilter(list,(str)->str.length()>3);
System.out.println(list.toString());
}
public List<String> stringFilter(List<String> list, Predicate<String> pre){
List<String> li=new ArrayList<>();
for(String str:list){
if(pre.test(str)){
li.add(str);
}
}
return li;
}
java8的相关特性的更多相关文章
- java8的新特性以及用法简介
1. 介绍 2 接口的默认方法 2 lambda表达式 2.1 函数式接口 2.2 方法与构造函数引用 2.3 访问局部变量 2.4 访问对象字段与静态变量 3. 内建函数式接口 3.1 Predic ...
- 简单了解JAVA8的新特性
JAVA8新特性会颠覆整个JAVA程序员的编程习惯 甚至如果您坚守JAVA7之前的编程习惯,今后你看比较年轻的程序员写的JAVA代码都会无法理解 所以为了保证不脱钩,我觉得有必要学习JAVA8的新特性 ...
- 初窥css---选择器及相关特性
选择器及相关特性 基础选择器 标签选择器 相当于全选,在我看来局限性较大,也没啥意义的感觉,用处不太大 id选择器 有利于对于某个小盒子的部分属性进行改变,但是若是需要改的小盒子很多的话,就会很麻烦 ...
- Java8常用新特性实践
前言: 时下Oracle开速迭代的Java社区以即将推出Java10,但尴尬的是不少小中企业仍使用JDK7甚至JDK6开发. 从上面列出的JDK8特性中我们可以发现Java8的部分特性很明显的是从Sc ...
- C#中的自定义控件中的属性、事件及一些相关特性的总结(转)
摘要: C#中的自定义控件中的属性(Property).事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实 ...
- Atitit.jdk java8的语法特性详解 attilax 总结
Atitit.jdk java8的语法特性详解 attilax 总结 1.1. 类型推断这个特别有趣的.鲜为人知的特性1 2. Lambda1 2.1. 内部迭代意味着改由Java类库来进行迭代,而不 ...
- Java8 Stream新特性详解及实战
Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...
- java5、java6、java7、java8的新特性
Java5: 1.泛型 Generics: 引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...
- innodb buffer pool相关特性
背景 innodb buffer pool作为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能.因此在数据库发生变更,比如重启.主备切换实例迁移等等,innodb buffer po ...
随机推荐
- 微服务发展规划(PS 大概分层未细化到具体系统)
网关层 标准化认证业务前台 前置HTML 基于VUE的浏览器端渲染等特性,完全可以看成一个独立的层业务中台 a. 各个系统的业务功能,以业务功能为单位拆分出的业务服务. b. 配合业务前台所产生的聚合 ...
- 【数据库开发】C++测试redis中的publish/subscribe
运用 http://blog.csdn.net/xumaojun/article/details/51558237 中的redis_publisher.hredis_publisher.cpp red ...
- 使用Rabbit MQ消息队列
使用Rabbit MQ消息队列 综合概述 消息队列 消息队列就是一个消息的链表,可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向消息队列中按照一定的规则添加新消息 ...
- shell 批量重命名
原文链接https://www.cnblogs.com/sunmmi/articles/6709125.html shell 批量重命名 1.把文件名的第一字母批量改成a 方法一: 1 2 3 4 ...
- 工作总结--CTO(张王岩)File的使用
名称 路径分隔符 pathSeparator separator 构造器 文件名.路径名 getName() getPath() getAbsolutePath() getParent ...
- PS错误1
PS错误1 提示要卸载.不用卸载直接安装即可.还保留了之前的设置. 在安装目录下看看有没有安装PS的exe程序.可能有.
- springcloud断路器Dashboard监控仪表盘的使用
断路器Dashboard监控仪表盘的使用 在原有的orderserverfeignhystrix服务中使用 1.增加依赖仓库 <dependency> <g ...
- [eclipse]UML之AmaterasUML 插件
软件体系结构分析软件设计模式要求给出相应设计模式源码对应的UML类图,在此之前我安装过一种UML插件,可以自动生成一个源码包对应的UML类图,但是重装过系统,所以软件包括eclipse都重新下载了新的 ...
- android 项目集成 微信支付
0.环境 下载 libammsdk.jar 1.需要的常量值 public class Constant { /** 微信中用到的常量值 */ public static final class WX ...
- ASP.NET WEB应用程序(.network4.5)MVC 工作原理
MVC就是模型.视图.控制器. 项目中控制器对应Controllers目录,视图对应Views目录,模型对应Models目录. 1.当我们创建一个控制器时,比如在Controllers目录新建一个名字 ...