lambda表达式

JAVA8 十大新特性详解

匿名 (未验证) 提交于 2019-12-02 21:53:52
https://blog.csdn.net/cdw8131197/article/details/68553148 https://blog.csdn.net/sun_promise/article/details/51315032 在接口中新增了default方法和static方法,这两种方法可以有方法体 1、static方法 示例代码: public interface DefalutTest { static int a = 5; default void defaultMethod(){ System. out.println( "DefalutTest defalut 方法"); } int sub( int a, int b); static void staticMethod() { System. out.println( "DefalutTest static 方法"); } } 1 2 3 4 5 6 7 8 9 10 11 12 接口里的静态方法,即static修饰的有方法体的方法不会被继承或者实现,但是静态变量会被继承 例如:我们添加一个接口DefalutTest的实现类DefaultTestImpl public class DefaultTestImpl implements DefalutTest{ @Override public int sub(

Java lambda表达式的常见用法

匿名 (未验证) 提交于 2019-12-02 21:52:03
public class Java8Test { public static class Staff { private String name ; private int age ; private BigDecimal salary ; public Staff ( String name , BigDecimal salary , int age ) { this . name = name ; this . salary = salary ; this . age = age ; } public String getName () { return name ; } public int getAge () { return age ; } public BigDecimal getSalary () { return salary ; } } public static void main ( String [] args ) { List < Staff > list = new ArrayList <>(); list . add ( new Staff ( "测试" , new BigDecimal ( "8.8" ), 18 )); list . add ( new Staff ( "后端" , new BigDecimal ( "18.8" ), 20 ));

java8之stream和lambda表达式

旧时模样 提交于 2019-12-02 19:18:05
JAVA 8 已经推出有一段时间了, 相比之前, 我们操作集合的方式应该是这样? 代码:List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); for(String s:list){ System.out.println(s); } 这样? 代码: List<String > list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5"); for(int i=0;i<list.size();i++){ System,out.println(list.get(i)); } Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找、遍历、过滤以及常见计算等本篇只举例list和map, 为了便于理解, 我们先创建一个数据类 PS:为了解决屏幕空间, 注释不标准, 请忽略 首先我们操作list 1.遍历所有人员的名字 代码: personList.stream(

java8新特性介绍

血红的双手。 提交于 2019-12-02 18:43:50
一:接口的默认方法 Java8允许开发者通过使用关键字default向接口中加入非抽象方法。这一特性被称为扩展方法。 interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } } //方法启用 Formula formula = new Formula() { @Override public double calculate(int a) { return sqrt(a * 100); } }; formula.calculate(100); // 100.0 formula.sqrt(16); // 4.0 这里要特别说明,并不是所有的接口都会有效, 当使用mybatis时,在dao层接口中写默认实现是无法调用的,依然会报错,org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): io.creams.building.dao.RoomLogDao.add,依然会从mapper.xml文件中寻找对应的语句,不会执行默认实现方法。 当使用JPA(hibernate不确定,没测试),是可以使用的,会执行默认方法

Lambda表达式

ⅰ亾dé卋堺 提交于 2019-12-02 08:47:10
一、引言 java8最大的特性就是引入Lambda表达式,即函数式编程,可以将行为进行传递。 总结就是:使用不可变值与函数,函数对不可变值进行处理,映射成另一个值。 原文链接:https://mp.weixin.qq.com/s/WVMBn2yspybbFc8jTC6mmg 二、java重要的函数式接口 1、什么是函数式接口 函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型。使用@FunctionalInterface注解修饰的类,编译器会检测该类是否只有一个抽象方法或接口,否则,会报错。可以有多个默认方法,静态方法。 1.1 java8自带的常用函数式接口。 public class Test { public static void main(String[] args) { Predicate<Integer> predicate = x -> x > 185; Student student = new Student("9龙", 23, 175); System.out.println( "9龙的身高高于185吗?:" + predicate.test(student.getStature())); Consumer<String> consumer = System.out::println; consumer.accept("命运由我不由天");

Java8新特性整理--简洁实用版

匆匆过客 提交于 2019-12-02 06:44:15
Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。 Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。 Date Time API − 加强对日期与时间的处理。 Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。 Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。 1. Lambda 表达式实例 1.1. Lambda 表达式的简单例子: // 1. 不需要参数,返回值为 5 () -> 5 // 2. 接收一个参数(数字类型),返回其2倍的值 x -> 2 * x // 3. 接受2个参数(数字)

JDK8中Lambda表达式底层实现浅析(一)

我的未来我决定 提交于 2019-12-01 23:10:45
1.前言 2014年十月份的时候Debug了下Lambda的实现代码, 大概了解了Lambda的实现, 昨天回忆了下, 发现以忘光, 还是写篇博客吧, 方便记忆 这篇文章是我本地Debug后记录下来的所见所闻, 不一定完全正确, 如有错误, 请务必指出. 2.环境 JDK: Oracle JDK1.8.0_05 64位 , Eclipse4.4 3.过程 初看Lambda时以为Lambda就是编译器帮我们把Lambda表达式给编译成了一个匿名内部类, 然后调用, 但是偶然间看到字节码文件后, 发现有点不同, 于是研究了下. //源码是这样的 public static void main(String[] args) throws Throwable { String hello = "hello lambda "; Function<String, Void> func = (name) -> { System.out.println(hello + name); return null; }; func.apply("haogrgr"); } //原本以为编译器会将Lambda表达式编译成这样. String hello = "hello lambda "; Function<String, Void> func = new Function<String, Void>() {

JAVA8新特性-lambda表达式

|▌冷眼眸甩不掉的悲伤 提交于 2019-12-01 16:09:01
摘要 一篇让你搞懂lambda表达式、函数式接口、方法引用、Optional这些JAVA8的新特性及相互间关系。下图是本文的内容概要 函数式接口(Functional Interface) 如果一个接口的定义带有 @FunctionanlInterface 注解,它就是函数式接口。但其实函数式接口不一定非要带这个注解,只要满足一个条件:只有一个抽象的方法。 注意:静态方法,默认方法和覆盖了Object的方法都不算抽象方法 我们来定义一个函数式接口: @FunctionalInterface public interface Counter { @Override boolean equals ( Counter c ) ; public static String toString ( Counter c ) ; public int count ( ) ; } 这是计数器接口只有一个计数方法count()是抽象方法 JDK 内置的函数函数式接口方法 1,Consumer<T> T为输入参数类型,执行某个动作但无返回值,例如 Consumer < String > print = ( x ) - > { System . our . println ( x ) ; } 等号前是函数式接口print的定义,等号后就是lambda表达式

java8新特性-lambda表达式

[亡魂溺海] 提交于 2019-12-01 16:08:03
java8新特性-函数式表达式 package newJava8; /** * java8新特性 lambda表达式(函数式编程) * 1-lambda表达式使用在接口方面 * 2-语法格式 * (参数,...)->{ 函数体}; * 3-单行函数式注解 @FunctionalInterface */ @FunctionalInterface interface testInterface{ public void testplay();//无参函数 } interface testInterface2{ public int testadd(int x,int y);//有参函数 } //测试类 public class NewLambda { public static void main(String args[]){ testInteface t1=()->{ System.out.println("testplay***"); }; t1.testplay();//testplay*** int x=2;int y=3; testInterface2 t2=(x1,y1)-> x1+y1; System.out.println(t2.testadd(x,y));//5 } } 来源: CSDN 作者: qq_31803271 链接: https://blog.csdn

JAVA8 十大新特性

て烟熏妆下的殇ゞ 提交于 2019-12-01 07:55:18
一、接口的默认方法 Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 default关键字即可,这个特征又叫做扩展方法,示例如下: 1 interface Formula { 2 double calculate(int a); 3 4 default double sqrt(int a) { 5 return Math.sqrt(a); 6 } 7 } Formula接口在拥有calculate方法之外同时还定义了sqrt方法,实现了Formula接口的子类只需要实现一个calculate方法,默认方法sqrt将在子类上可以直接使用。 1 Formula formula = new Formula() { 2 @Override 3 public double calculate(int a) { 4 return sqrt(a * 100); 5 } 6 }; 7 8 formula.calculate(100); // 100.0 9 formula.sqrt(16); // 4.0 文中的formula被实现为一个匿名类的实例,该代码非常容易理解,6行代码实现了计算 sqrt(a * 100)。在下一节中,我们将会看到实现单方法接口的更简单的做法。 译者注: 在Java中只有单继承,如果要让一个类赋予新的特性,通常是使用接口来实现,在C++中支持多继承