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的相关特性的更多相关文章

  1. java8的新特性以及用法简介

    1. 介绍 2 接口的默认方法 2 lambda表达式 2.1 函数式接口 2.2 方法与构造函数引用 2.3 访问局部变量 2.4 访问对象字段与静态变量 3. 内建函数式接口 3.1 Predic ...

  2. 简单了解JAVA8的新特性

    JAVA8新特性会颠覆整个JAVA程序员的编程习惯 甚至如果您坚守JAVA7之前的编程习惯,今后你看比较年轻的程序员写的JAVA代码都会无法理解 所以为了保证不脱钩,我觉得有必要学习JAVA8的新特性 ...

  3. 初窥css---选择器及相关特性

    选择器及相关特性 基础选择器 标签选择器 相当于全选,在我看来局限性较大,也没啥意义的感觉,用处不太大 id选择器 有利于对于某个小盒子的部分属性进行改变,但是若是需要改的小盒子很多的话,就会很麻烦 ...

  4. Java8常用新特性实践

    前言: 时下Oracle开速迭代的Java社区以即将推出Java10,但尴尬的是不少小中企业仍使用JDK7甚至JDK6开发. 从上面列出的JDK8特性中我们可以发现Java8的部分特性很明显的是从Sc ...

  5. C#中的自定义控件中的属性、事件及一些相关特性的总结(转)

      摘要: C#中的自定义控件中的属性(Property).事件(Event)及一些相关特性(Attribute)的总结 今天学习了下C#用户控件开发添加自定义属性的事件,主要参考了MSDN,总结并实 ...

  6. Atitit.jdk java8的语法特性详解 attilax 总结

    Atitit.jdk java8的语法特性详解 attilax 总结 1.1. 类型推断这个特别有趣的.鲜为人知的特性1 2. Lambda1 2.1. 内部迭代意味着改由Java类库来进行迭代,而不 ...

  7. Java8 Stream新特性详解及实战

    Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...

  8. java5、java6、java7、java8的新特性

    Java5: 1.泛型 Generics:        引用泛型之后,允许指定集合里元素的类型,免去了强制类型转换,并且能在编译时刻进行类型检查的好处. Parameterized Type作为参数 ...

  9. innodb buffer pool相关特性

    背景 innodb buffer pool作为innodb最重要的缓存,其缓存命中率的高低会直接影响数据库的性能.因此在数据库发生变更,比如重启.主备切换实例迁移等等,innodb buffer po ...

随机推荐

  1. 慕课零基础学java语言翁恺老师——第二周编程题

    1.时间换算(5分) 题目内容: UTC是世界协调时,BJT是北京时间,UTC时间相当于BJT减去8.现在,你的程序要读入一个整数,表示BJT的时和分.整数的个位和十位表示分,百位和千位表示小时.如果 ...

  2. 用户字符串操作,这里面包括字符串的decode、encode、substract等等操作

    工具类描述:用户字符串操作,这里面包括字符串的decode.encode.substract等等操作 package cn.hgnulb; import java.io.UnsupportedEnco ...

  3. IP地址 子网掩码 网络地址 主机地址 广播地址

    1.一定要明白各自的概念分别表示什么 IP地址:IP地址是用来识别网络上的设备,因此,IP地址是由网络地址与主机地址两部分所组成. 子网掩码:子网掩码不能单独存在,它必须结合IP地址一起使用.子网掩码 ...

  4. python3 字符集的应用

    python3的字符集测试 s_test=u"严" print(s_test.encode('gbk')) print([s_test]) #print(s_test[]) #pr ...

  5. go 结构体定义和结构体指针

    结构体一个结构体(`struct`)就是一个字段的集合. 将来要使用它向java .C# 中的class 有相同的地位 struct 可以用来值传递 同时可以通过引用传递参数(地址) java C# ...

  6. SAS学习笔记42 宏程序

    Autocall Macro是由SAS提供的一些实现特定功能的Macro Program,可以在代码中直接使用 其中以Q开头的相比正常的多了隐藏特殊字符的功能(称之为Macro Quoting): K ...

  7. Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别

    转自:https://www.jianshu.com/p/404500a0408a 补充理解: 先把官网上对应用命名空间(app_name)和实例命名空间(namespace)的解释贴上: app_n ...

  8. Tomcat server.xml port server context 配置

  9. kong命令(三)route

    介绍 route 是一套匹配客户端请求的规则.每个route都会匹配一个service,每个service可定关联多个route. 可以说service:route=1:n.一对多的关系.每个匹配到r ...

  10. TCP的三次握手与四次挥手笔记

    TCP的三次握手与四次挥手笔记 TCP Flags URG: 紧急指针标志 ACK:确认序号标志 PSH:push标志 RST:重置连接标志 SYN:同步序号,用于建立连接过程 FIN: finish ...