java8

java8 lambda表达式与集合类批处理操作

瘦欲@ 提交于 2019-11-30 05:25:54
一、基本概念 λ表达式可以被当做是一个Object。λ表达式的类型,叫做“目标类型(target type)”。λ表达式的目标类型是“函数接口(functional interface)”,这是Java8新引入的概念。它的定义是:一个接口,如果只有一个显式声明的抽象方法,那么它就是一个函数接口。一般用@FunctionalInterface标注出来(也可以不标) 。 @FunctionalInterface public interface Runnable { void run(); } public interface Callable<V> { V call() throws Exception; } public interface ActionListener { void actionPerformed(ActionEvent e); } public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); } 注意最后这个Comparator接口。它里面声明了两个方法,貌似不符合函数接口的定义,但它的确是函数接口。这是因为equals方法是Object的,所有的接口都会声明Object的public方法——虽然大多是隐式的。所以

30分钟入门Java8之默认方法和静态接口方法

余生颓废 提交于 2019-11-30 04:40:46
30分钟入门Java8之默认方法和静态接口方法 作者: @JohnTsai 本文为作者原创,转载请注明出处: http://www.cnblogs.com/JohnTsai/p/5598036.html 30分钟入门Java8之默认方法和静态接口方法 前言 上一篇文章 30分钟入门Java8之lambda表达式 ,我们学习了lambda表达式。现在继续Java8新语言特性的学习,今天,我们要学习的是默认方法和静态接口方法。 这一Java8的新语言特性,在Android N中也得到了支持。至于如何在Android开发中配置Java8的开发环境,请查看上一篇文章 30分钟入门Java8之lambda表达式 。 默认方法 默认方法让我们能给我们的软件库的接口 增加新的方法 ,并且能保证对使用这个接口的 老版本代码的兼容性 。 下面通过一个简单的例子来深入理解下默认方法: 1.一天,PM说我们的产品需要获取时间和日期。于是我们就写了一个设置和获取日期时间的接口类 TimeClient 。 public interface TimeClient { void setTime(int hour, int minute, int second); void setDate(int day, int month, int year); void setDateAndTime(int day,

Java 8新特性探究 前言

偶尔善良 提交于 2019-11-29 23:28:03
自2013年6月13日,oracle就已经发布的Java 8特性完备版本(M7),但最终GA版本将在2014年3月18日(已第二次跳票,原计划今年9月发布的,据官网宣称是为了解决安全问题......),相信大家多多少少都听闻了关于Java 8的改进,总得来说,Java 8从语言,核心库,国际化、虚拟机,安全性,平台等方面一共有55个特性,本系列博文将带大家对这55个特性进行探究,不求做到最好,只求详细,深入浅出,通俗易懂。 java几个重大版本 java从1995年发布到现在,也走过18年了,个人认为,其中几个java版本都肩负着重大使命,影响甚远; jdk1.0 1995年5月23日诞生,Oak语言改名为Java,并提出“Write Once ,Run anywhere"; jdk1.2 1999年6月发布,将java划分为J2SE,J2ME,J2EE三大平台; jdk1.4 主要是性能提升,在2000年时候JAVA成为世界上最流行的电脑语言,跟这个版本离不开关系,估计国内还有大量的java应用是运行在此版本上; jdk5 诞生于2004年,他的使命就是易用,加入1. 泛型 2 自动装箱/拆箱 3 for-each 4 static import 5 变长参数等, 为了表示该版本的重要性,J2SE1.5更名为Java SE 5.0; jdk8 将在2014年3月份发布,迄今为止

Java 8新特性探究(六)泛型的目标类型推断

谁说胖子不能爱 提交于 2019-11-29 13:09:00
简单理解泛型 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。通俗点将就是“类型的变量”。这种类型变量可以用在类、接口和方法的创建中。 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换(casting)上的操作: List<Apple> box = new ArrayList<Apple>();box.add(new Apple());Apple apple =box.get(0); 上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样: Apple apple = (Apple)box.get(0); 泛型的尴尬 泛型的最大优点是提供了程序的类型安全同时可以向后兼容,但也有尴尬的地方,就是每次定义时都要写明泛型的类型,这样显示指定不仅感觉有些冗长,最主要是很多程序员不熟悉泛型,因此很多时候不能够给出正确的类型参数,现在通过编译器自动推断泛型的参数类型,能够减少这样的情况,并提高代码可读性。 java7的泛型类型推断改进 在以前的版本中使用泛型类型,需要在声明并赋值的时候,两侧都加上泛型类型。例如: Map<String, String> myMap = new HashMap

JAVA8新特性之:函数式接口

廉价感情. 提交于 2019-11-29 03:39:10
什么是函数式接口(Functional Interface) 所谓的函数式接口,当然首先是一个接口,然后就是在这个接口里面 只能有一个抽象方法 。 这种类型的接口也称为SAM接口,即Single Abstract Method interfaces。 函数式接口用途 它主要用在Lambda表达式和方法引用(实际上也可认为是Lambda表达式)上。 如定义了一个函数式接口如下: @FunctionalInterface interface GreetingService { void sayMessage(String message); } 使用Lambda表达式来表示该接口的一个实现(注:JAVA 8 之前一般是用匿名类实现的): GreetingService greetService1 = message -> System.out.println("Hello " + message); 关于@FunctionalInterface 注解 Java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于 编译级错误检查 ,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。 正确例子 ,没有报错 : @FunctionalInterface interface GreetingService { void sayMessage

利用java8新特性实现类似javascript callback特性

断了今生、忘了曾经 提交于 2019-11-29 03:38:39
Java8的新特性之一,就是首次引入了函数式编程Lambda表达式,按oracle的说法,是为了引导java向函数式编程的方向发展。 在JDK1.8中,多了一个包,java.util.function,这里主要用到了这个包下面的两个接口: Consumer<T> //Represents an operation that accepts a single input argument and returns no result. Function<T,R> //Represents a function that accepts one argument and produces a result. 要解释清楚这个问题,首先得从lambda表达式说起 (x,y)->doSomethingWith(x,y); 这句话就是一个lambda表达式的例子;"->"是Java8新定义的一个操作符,操作符左边代表lambda表达式接收的参数,这里它接收了两个参数,x和y;表达式右边是函数操作,也就是对这两个变量执行某种操作。如x+y,x*y等。 简单的解释了一下java8的lambda表达式,接下来进入正题: 在java8中,function包下面的所有接口都描述了一种预定义的lambda表达式类型,换句话说,就是可以通过声名接口类型的变量为lambda赋值,从而达到函数参数化的目的

Java 8新特性探究(四)类型注解 复杂还是便捷

两盒软妹~` 提交于 2019-11-28 14:06:51
本文将介绍java 8的第二个特性:类型注解。 注解大家都知道,从java5开始加入这一特性,发展到现在已然是遍地开花,在很多框架中得到了广泛的使用,用来简化程序中的配置。那充满争议的类型注解究竟是什么?复杂还是便捷? 什么是类型注解 在java 8之前,注解只能是在声明的地方所使用,比如类,方法,属性;java 8里面,注解可以应用在任何地方,比如: 创建类实例 new @Interned MyObject(); 类型映射 myString = (@NonNull String) str; implements 语句中 class UnmodifiableList<T> implements @Readonly List<@Readonly T> { ... } throw exception声明 void monitorTemperature() throws @Critical TemperatureException { ... } 需要注意的是,类型注解只是语法而不是语义,并不会影响java的编译时间,加载时间,以及运行时间,也就是说,编译成class文件的时候并不包含类型注解。 类型注解的作用 先看看下面代码 Collections.emptyList().add("One"); int i=Integer.parseInt("hello"); System

AndroidStudio3 支持 Java8 了,就问你敢用吗

半城伤御伤魂 提交于 2019-11-27 19:54:21
本文开源实验室原创,转载请以链接注明: https://kymjs.com/code/2017/10/26/01/ 支持 Java 8 kotlin 相关的东西很早以前我就在讲了,这里就不再细说了。AS3里面有一个亮眼的特性就是支持J8。首先说一下为什么以前我们不能用Java8的新特性,最主要的原因就是 lambda 语法。在 JVM 中,Java8 的语法是通过一个叫做 invokedynamic 的字节码操作命令完成的,但是这东西在 dalvik 中并没有,因此一直不能用。 现在AS3.0之所以能用,实际上是在新的Android Studio中加入了一个 desugar 的东西,他就类似 JVM 上的 invokedynamic ,把Java8的字节码翻译成 dalvik 可识别的。 官网介绍: Android Studio provides built-in support for using certain Java 8 language features and third-party libraries that use them. As shown in figure 1, the default toolchain implements the new language features by performing bytecode transformations,

名词王国里的新政-解读Java8之lambda表达式

喜夏-厌秋 提交于 2019-11-27 19:54:01
前几天在reddit上看到Java8 M8 Developer Preview版本已经发布了,不免想要尝鲜一把。Developer Preview版本已经所有Feature都完成了,Java8的特性可以在这里看到 http://openjdk.java.net/projects/jdk8/features ,下载地址: http://jdk8.java.net/download.html 。Java8最值得期待的就是lambda表达式了,本文就将带你体验lambda表达式,并进行比较深入的解析。 下载及配置 Intellij IDEA已经完美支持Java8了。首先打开Project Structure,在Project里设置新的JDK路径,并设置Modules=>Source=>Language Level为8.0即可。 现在我们可以使用Java8编写程序了!但是当我们开开心心编写完,享受到高级的lambda表达式后,运行程序,会提示: java: Compilation failed: internal java compiler error !这是因为javacc的版本还不对,在Compiler=>Java Compiler里将项目对应的javacc版本选为1.8即可。 什么?你说你用Eclipse?好像目前还没有稳定版!想尝鲜的,可以看看这个地址 http:/

为什么选择 Java 8 ?

谁都会走 提交于 2019-11-27 19:21:20
本文是 DZone 指南 Java 生态系统 的专题文章。点击链接可阅读更多见解深刻的文章、行业统计信息,系 OneAPM 工程师编译整理。 要点速递 在很多情况下, Java8 都能提升应用性能,而无需任何改变或性能调优。 Lambda 表达式、 Streams API 以及现有类的新方法都是提高生产力的重要工具。 Java8 新推出的 Optional 类型在处理 null 值时,能减少 NullPointerExceptions 的可能性,给开发者极大的灵活度。 去年年初,Java8 粉墨登场,现在 Java7 便已 行将就木 。在明年底 Java9 推出之前,Java8 是 Oracle 唯一支持的版本。然而,许多公司都将稳定性放在第一位,所以都还在用 Java7,甚至 Java6。 让我们来了解一下 Java8 的一些特性,让你在说服团队升级 Java 版本时理由能更充分一些。 速度更快 可以取悦老板、满足业务或运营人员的一大卖点是:Java8 运行应用时速度更快。通常,升级至 Java8 的应用都能得到速度上的提升,即便没有做任何改变或调优。对于为了迎合特定 JVM 而做出调整的应用,这或许并不适用。但 Java8 性能更优的理由还有很多: 常见数据结构的性能提升 :对 广受欢迎的 HashMap 进行的基准测试 表明,它们在 Java8 中的性能更好