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 ...
随机推荐
- CCF201403 无线网络【限制型最短路】
问题描述 目前在一个很大的平面房间里有 n 个无线路由器,每个无线路由器都固定在某个点上.任何两个无线路由器只要距离不超过 r 就能互相建立网络连接. 除此以外,另有 m 个可以摆放无线路由器的位置. ...
- PAT甲级 堆 相关题_C++题解
堆 目录 <算法笔记>重点摘要 1147 Heaps (30) 1155 Heap Paths (30) <算法笔记> 9.7 堆 重点摘要 1. 定义 堆是完全二叉树,树中每 ...
- Pywinauto使用方法
3 Pywinauto使用 连接为 http://pywinauto.github.io/ 3.1 关联到一个应用,用以下方法: ? start_(path) connect_(handle or p ...
- 2019java学习路线图
学习路线图往往是学习一样技术的入门指南.网上搜到的Java学习路线图也是一抓一大把.但是很多学习路线图总结的云里雾里,也没有配套的视频,学习效果并不好. 分享一个完整的Java学习路线图给大家,也是贴 ...
- s5p6818 Overview
S5P6818: 64bit Octa-Core, High Performance, Advanced 3D Graphics, Full-HD Multimedia Video, A53 Core ...
- Spring邮件服务:Maven + Spring SMTP Mail (可发送附件)
1 spring-smtp-mail.xml <?xml version="1.0" encoding="UTF-8"?> <beans x ...
- 17-MySQL DBA笔记-应用程序调优
第17章 应用程序调优 本章将主要讲述应用程序调优的一些方法和步骤,应用程序调优的领域很广,本章主要关注的是涉及数据库方面的调优. 在进行性能分析之前,我们先要熟悉应用的角色,它是什么版本的,做什么的 ...
- 数据库-SQL语句练习【已完成26题,还剩35题】
练习题链接:https://www.nowcoder.com/ta/sql?page=0 错题频次表 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1+1 1+ ...
- python 切换虚拟环境
每次电脑重启后,都要切入虚拟环境,命令总是忘记.如果使用IDE,可以指定interpeter方便的切换. 首先conda info --env 查看当前有几个环境 激活/禁用环境 source ac ...
- MySql外网不能访问设置
mysql的root账户,我在连接时通常用的是localhost或127.0.0.1,公司的测试服务器上的mysql也是localhost所以我想访问无法访问,测试暂停. 解决方法如下: 1,修改表, ...