广告
返回顶部
首页 > 资讯 > 精选 >java 1.8新特性有哪些
  • 336
分享到

java 1.8新特性有哪些

2023-06-06 14:06:30 336人浏览 独家记忆
摘要

这篇“java 1.8新特性有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java 1.8新特性有哪些”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入

这篇“java 1.8新特性有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java 1.8新特性有哪些”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入主题吧。

Java可以用来干什么

Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. 企业级应用开发;6. Java大数据开发;7.游戏开发等。

java 8发行版是自2004年发行的java 5以来最具有革命性的一个版本。java 8为java语言、编译器、类库、开发工具JVM等带来了大量新特性。

java 1.8中的几个新特性

lambda表达式

格式:(参数) -> {代码段}

如:new Thread(() -> {System.out.println("hello world!")}).start(); 这就是lambda表达式。

lambda的实现需要依赖函数式接口,lambda本质上是匿名内部类,jdk1.8以前,如果方法内需要操作其他接口的实现方法,可以通过匿名内部类来实现,

jdk1.8之后可以通过lambda表达式来代替匿名内部类,并且更为简化。

package java8; public class LambdaDemo {public static void main(String[] args) {//JDK1.8之前使用接口,采用匿名内部类的方式MyInterface mi = new MyInterface() {@Overridepublic void test() {System.out.println("test");}};mi.test();//JDK1.8之后,使用lambda表达式MyInterface lmi = () -> {System.out.println("test");};lmi.test();}}//定义一个函数式接口,只有一个抽象方法 interface MyInterface{void test();}

函数式接口 : 有且只有一个的抽象方法的接口称为函数式接口

函数式接口的常用接口 Function, Predicate,Supplier,Consumer 都在java.util.function包下

Function接口:R apply(T t) 接收一个参数并返回一个对象

package java8; import java.util.function.Function; public class LambdaDemo { public static void main(String[] args) {// function的使用// 传统模式,第一个泛型:接收的参数类型 第二个泛型,返回的参数类型Function<String, String> function1 = new Function<String, String>() {@Overridepublic String apply(String t) {return t;}};// 调用apply方法,并获取返回结果String res1 = function1.apply("function的使用");System.out.println(res1);// lambda的使用,当参数只有一个且不写参数类型时,"()"可以省略Function<String, String> function2 = t -> {return t;};// 调用apply方法,并获取返回结果String res2 = function2.apply("function的使用");System.out.println(res2);}}

Predicate接口 : boolean test(T  t) 接收一个参数,返回一个boolean值

常用来比较

package java8; import java.util.function.*; public class LambdaDemo { public static void main(String[] args) {// predicate的使用// 传统模式,泛型参数:接收的参数类型Predicate<Integer> predicate1 = new Predicate<Integer>() { @Overridepublic boolean test(Integer t) {// 大于等于10就为真,否则为假return t >= 10;} };// 执行predicate1的方法System.out.println(predicate1.test(11));System.out.println(predicate1.test(8));//使用lambda表达式Predicate<Integer> predicate2 = new Predicate<Integer>() {@Overridepublic boolean test(Integer t) {// 大于等于10就为真,否则为假return t >= 10;}};// 执行predicate1的方法System.out.println(predicate2.test(11));System.out.println(predicate2.test(8));}}

Supplier接口 :T get() 返回一个对象

生产者消费者模式的生产者,只管生产对象

package java8; import java.util.function.*; public class LambdaDemo { public static void main(String[] args) {//Supplier的使用// 传统模式,泛型参数:返回的参数类型Supplier<String> s1 = new Supplier<String>() { @Overridepublic String get() {return new String("supplier");}};//调用System.out.println(s1.get());// 使用lambda表达式//当代码只有一句时,可以省略"{}",不接收参数时,"()"不能省略Supplier<String> s2 = () -> new String("supplier");System.out.println(s2.get());}}

Consumer接口 :  accept(T t)接收一个参数,不返回任何值

生产者消费者模式的生产者,只管消费对象

package java8; import java.util.function.*; public class LambdaDemo { public static void main(String[] args) {// Consumer的使用// 传统模式,泛型参数:返回的参数类型Consumer<String> con1 = new Consumer<String>() { @Overridepublic void accept(String t) {System.out.println(t);}};con1.accept("consumer");//使用lambda表达式,同时省略"()","{}"Consumer<String> con2 = t -> System.out.println(t);con2.accept("consumer");}}

lambda实战用法:

package java8; import java.util.function.*; public class LambdaDemo { public static void main(String[] args) {//Runnable的实现,new Thread(() -> {System.out.println(Thread.currentThread().getName() + " run");}).start();System.out.println(Thread.currentThread().getName() + " run");}}

方法引用:

方法引用是指lambda表达式中只有一句方法调用,而这个方法有真实存在,此时就可以用方法引用来替换lambda表达式。

方法引用有四种类型

类名::静态方法名

对象名::实例方法名

类名::实例方法名

类名::new

package java8; import java.util.Arrays;import java.util.Collections;import java.util.List;import java.util.function.BiConsumer;import java.util.function.Supplier; public class MethodReferenceDemo {public static void main(String[] args) {// 定义3个Student对象Student s1 = new Student("zhangsan", 90);Student s2 = new Student("lisi", 60);Student s3 = new Student("wangwu", 70);// 添加到集合List<Student> students = Arrays.asList(s1, s2, s3); //普通的lambda实现// sort接收两个参数,第一个参数,要排序的集合,第二个参数,Comparator接口的实现// Collections.sort(students, (stu1,stu2) -> StudentSortUtil.sortByScore(stu1,stu2));// students.forEach(t -> System.out.println(t.getScore())); // 方法引用1---类名::静态方法名// Collections.sort(students, StudentSortUtil::sortByScore);// students.forEach(t -> System.out.println(t.getScore()));//创建实例对象,调用实例对象的方法StudentSortUtil ssu = new StudentSortUtil();//普通的lambda实现//Collections.sort(students, (stu1, stu2) -> ssu.sortByScoreInstance(stu1, stu2));//students.forEach(t -> System.out.println(t.getScore()));// 方法引用2---对象名::实例方法名//Collections.sort(students, ssu::sortByScoreInstance);//students.forEach(t -> System.out.println(t.getScore()));Collections.sort(students, Student::sortByScore);//创建一个新的Student对象,使用lambda表达式创建//不接收参数,返回一个对象,其实就是Supplier接口的实例Supplier<Student> su1 = () -> new Student();//方法引用4---类名::newSupplier<Student> su2 = Student::new;//BiConsumer是Consumer的扩展,可以接受两个参数返回一个值BiConsumer<String, Integer> bc1 = (name,score) -> new Student(name,score);//替换上面的lambda表达式,需要接收两个参数,所以调用的是有参构造方法BiConsumer<String, Integer> bc2 = Student::new;}} //定义一个学生实体类class Student {private String name;private int score; public Student() {} public Student(String name, int score) {this.name = name;this.score = score;} public String getName() {return name;} public void setName(String name) {this.name = name;} public int getScore() {return score;} public void setScore(int score) {this.score = score;} public int sortByScore(Student stu) {return this.getScore() - stu.getScore();} public int sortByName(Student stu) {return this.getName().compareTo(stu.getName());}} //定义一个学生排序工具类class StudentSortUtil { public static int sortByScore(Student stu1, Student stu2) {return stu1.getScore() - stu2.getScore();} public static int sortByName(Student stu1, Student stu2) {return stu1.getName().compareTo(stu2.getName());} // 普通方法,创建对象才能调用public int sortByScoreInstance(Student stu1, Student stu2) {return stu1.getScore() - stu2.getScore();} // 普通方法,创建对象才能调用public int sortByNameInstance(Student stu1, Student stu2) {return stu1.getName().compareTo(stu2.getName());}}

Stream:

Stream分为中间操作和终止操作,中间操作会继续返回一个新的流,终止操作返回一个结果。

一行代码中如果只有中间操作,则不会执行,只有遇见终止操作才会执行。

package java8; import java.util.ArrayList;import java.util.Arrays;import java.util.LinkedList;import java.util.stream.Stream; public class StreamDemo {public static void main(String[] args) {//Stream的使用//创建流,参数为可变参数Stream<Integer> stream = Stream.of(50,66,88);//将Stream转化为数组//Object[] array =  stream.toArray();//System.out.println(Arrays.toString(array));//筛选过滤条件,参数为Predicate,动作自己指定,找到大于60的数//流分为中间操作和终止操作,节点流会继续返回一个流对象,终止操作会返回一个结果,//只有中间流,代码不会执行,只有遇见终止操作才会执行//stream.filter((target) -> target > 60).forEach(System.out::println);//map对数据进行操作,接收一个Function实例 例:对流中的每个元素都乘以2stream.map((t) -> 2 * t).forEach(System.out::println);//流的无限模式,会对seed一直执行UnaryOperator的事件,一般和limit配合使用//skip(n)跳过n个元素,limit(n) 返回n个元素的流Stream.iterate(0, t -> t + 2).skip(2).limit(6).forEach(System.out::println);//将流转换为集合对象,第一个参数,传递一个Supplier 最终结果类型由此提供//第二个参数 BiConsumer() 传递两个参数,第一个要操作的集合,第二个当前的流元素//第三个元素BiConsumer() 传递两个集合,最终合并成一个集合//类似StringBuffer.append()方法//stream.collect(() -> new ArrayList<Integer>(),//(target,item)-> target.add(item),//(result,target)-> result.addAll(target)).forEach(System.out::println);//可以使用方法引用简化stream.collect(LinkedList::new,LinkedList::add,LinkedList::addAll);}}

以上是“java 1.8新特性有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: java 1.8新特性有哪些

本文链接: https://www.lsjlt.com/news/247265.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java 1.8新特性有哪些
    这篇“java 1.8新特性有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“java 1.8新特性有哪些”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的慢慢理解,接下来就让我们进入...
    99+
    2023-06-06
  • MongoDB 1.8 RC0版本的特性有哪些
    本篇文章给大家分享的是有关MongoDB 1.8 RC0版本的特性有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  前两天MongoDB...
    99+
    2022-10-18
  • JAVA 8新特性有哪些
    这篇文章主要介绍“JAVA 8新特性有哪些”,在日常操作中,相信很多人在JAVA 8新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JAVA 8新特性有哪些”的疑惑...
    99+
    2022-10-19
  • Java Spring之Spring5的新特性有哪些
    这篇文章主要介绍“Java Spring之Spring5的新特性有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java Spring之Spring5的新特性有哪些”文章能帮助大家解决问题。1 ...
    99+
    2023-07-05
  • Swagger3.0有哪些新特性
    这篇文章主要讲解了“Swagger3.0有哪些新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Swagger3.0有哪些新特性”吧!支持 OpenAPI...
    99+
    2022-10-19
  • CSS3有哪些新特性
    这篇文章主要介绍“CSS3有哪些新特性”,在日常操作中,相信很多人在CSS3有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS3有哪些新特性”的疑惑有所帮助!接...
    99+
    2022-10-19
  • JDK13新特性有哪些
    这篇文章将为大家详细讲解有关JDK13新特性有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、switch优化更新      JDK11以及之前的版...
    99+
    2023-06-04
  • HTML5新特性有哪些
    本篇内容主要讲解“HTML5新特性有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5新特性有哪些”吧!Web存储 它具有以下特征: 你可以通过属性和方法来使用 JavaScript ...
    99+
    2023-06-04
  • Java9新特性有哪些
    本篇内容介绍了“Java9新特性有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!新的APIs和性能特性:轻量级的JSON APIHTTP...
    99+
    2023-06-17
  • Android4.3新特性有哪些
    Android 4.3(又名Jelly Bean)引入了以下一些新特性:1. 多用户支持:Android 4.3允许在同一设备上创建...
    99+
    2023-09-25
    Android
  • html5有哪些新特性
    本教程操作环境:windows7系统、HTML5版、Dell G3电脑。HTML5的十大新特性 为了更好地处理今天的互联网应用,HTML5添加了很多新元素及功能,比如: 图形的绘制,多媒体内容,更好的页面结构,更好的形式 处理,和几个api...
    99+
    2023-05-14
    html5
  • Kubernetes1.5有哪些新特性
    这篇“Kubernetes1.5有哪些新特性”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Kubernetes1.5有哪些新...
    99+
    2023-06-28
  • MySQL8.0新特性有哪些
    这篇文章给大家分享的是有关MySQL8.0新特性有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。1、 默认字符集由latin1变为utf8mb4在8.0版本之前,默认字符集为...
    99+
    2022-10-18
  • PostgreSQL11有哪些新特性
    这篇文章主要介绍“PostgreSQL11有哪些新特性”,在日常操作中,相信很多人在PostgreSQL11有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Post...
    99+
    2022-10-19
  • Oracle12C新特性有哪些
    这篇文章主要介绍“Oracle12C新特性有哪些”,在日常操作中,相信很多人在Oracle12C新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12C新...
    99+
    2022-10-18
  • MySQL5.6有哪些新特性
    这篇文章主要介绍“MySQL5.6有哪些新特性”,在日常操作中,相信很多人在MySQL5.6有哪些新特性问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL5.6有哪些新...
    99+
    2022-10-19
  • MindSpore有哪些新特性
    这篇文章主要讲解了“MindSpore有哪些新特性”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MindSpore有哪些新特性”吧!一、效率提升大幅提升动态...
    99+
    2022-10-19
  • JavaScript新特性有哪些
    这篇文章主要介绍“JavaScript新特性有哪些”,在日常操作中,相信很多人在JavaScript新特性有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScri...
    99+
    2022-10-19
  • jQuery1.6.4有哪些新特性
    本篇内容介绍了“jQuery1.6.4有哪些新特性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Data:...
    99+
    2022-10-19
  • oracle18c新特性有哪些
    oracle18c新特性有哪些,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Oracle宣布Database...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作