博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java8新特性 Lambda表达式
阅读量:6133 次
发布时间:2019-06-21

本文共 4121 字,大约阅读时间需要 13 分钟。

hot3.png

/* Lambda表达式基础语法 【拷贝小括号 + 写死右箭头 + 落地大括号】 java8中引入了一个新的操作符 -> 箭头操作符或Lambda操作符 箭头操作符将Lambda表达式拆分成两部分

左侧:Lambda表达式的参数列表右侧:Lambda表达式中所需要执行的功能,即Lambda体语法格式一: 无参数、无返回值	() -> System.out.println("Hello Lambda")语法格式二: 有一个参数,并且无返回值	(x) -> System.out.println(x)语法格式三: 若只有一个参数,小括号可以省略不写	x -> System.out.println(x)	语法格式四: 有两个以上参数,有返回值,并且Lambda体中有多条语句	Consumer
con = (x, y) -> { System.out.println("函数式接口"); return Integer.compare(x, y); }语法格式五: 若Lambda体中只有一条语句,return和大括号都可以省略不写Consumer
con = (x, y) -> Integer.compare(x, y);语法格式六: Lambda表达式的参数列表的数据类型可以省略,因为jvm编译器可以通过上下文推断出数据类型 x -> System.out.println(x)

左右遇一括号省 左侧推断类型省

Lambda表达式需要函数式接口的支持 函数式接口:接口中只有一个抽象方法的接口,称为函数式接口 可以使用@FunctionalInterface修饰,可以检查是否是函数式接口

*/ public class TestLambda2{

public void test3(){	Consumer
con = (x, y) -> { System.out.println("函数式接口"); return Integer.compare(x, y); }}public void test2(){ Consumer
con = (x) -> System.out.println(x); con.accept("牛逼");}List
emps = Arrays.asList( new Employee("张三",18,9999), new Employee("李四",38,9999), new Employee("王五",50,9999), new Employee("赵柳",16,9999), new Employee("田七",8,9999),);public void test3(){ Collections.sort(emps, (e1, e2) -> { if(e1.getAge() == e2.getAge()){ return e1.getName().compareTo(e2.getName()); }else{ return Integer.compare(e1.getAge(), e2.getAge()) } }); for(Employee emp : emps){ System.out.println(emp); }}

}

/* 四大内置核心函数式接口

Consumer
:消费型接口 void accept(T t);Supplier
:供给型接口 T get();Function
:函数型接口 R apply(T t);Predicate
:断言型接口 boolean test(T t);

*/ public class TestLambda3{

// Predicate
:断言型接口public void test4(){ List
list = new Arrays.asList("hello","ageget","lambda","ok") List
strList = filterStr(list, (s) -> s.length() > 3); for(String str : strList){ System.out.println(str); }}// 将满足条件的字符串放入集合中public List
filterStr(List
list, Predicate
pre){ List
strList = new ArrayList<>(); for(String str : list){ if(pre.test(str)){ strList.add(str); } } return strList;}// Function
:函数型接口public void test3(){ String newStr1 = strHandler(" 大吉大利 ", (str) -> str.trim()); System.out.println(newStr1); String newStr2 = strHandler(" 大吉大利 ", (str) -> str.substring(2,4)); System.out.println(newStr2);}// 用于处理字符串public String strHandler(String str, Function
fun){ return fun.apply(str);} // Supplier
:供给型接口public void test2(){ List
numList = getNumList(10, () -> (int)(Math.random() * 100)) for(Integer num : numList){ System.out.println(num); }}// 产生指定个数的整数并放入集合中public List
getNumList(int num, Supplier
sup){ List
list = new ArrayList<>(); for(int i=0; i
:消费型接口public void test1(){ happy(10000, (m) -> System.out.println("大宝剑" + m + "元"))}public void happy(double money, Consumer
con){ con.accept(money);}

}

/* 方法引用: 若Lambda体中的内容有方法已经实现了,我们可以使用 方法引用 (可以理解为方法引用是Lambda表达式的另外一种表现形式)

主要有三种语法格式:	对象::实例方法名	类::静态方法名	类::实例方法名

*/ public class TestMethodRef{

// 对象::实例方法名public void test1(){	Consumer
con = (x) -> System.out.println(x); PrintStream ps1 = System.out; Consumer
con1 = (x) -> ps1::println(x); PrintStream ps = System.out; Consumer
con1 = ps::println; Consumer
con2 = System.out::println; con2.accept("abcd");}

}

// Stream API 练习

public class TestStreamAPI{

/* 1. 给定一个数字列表,如何返回一个由每个数的平方构成的列表 给定1,2,3,4,5 返回 1,4,9,16,25

*/ public void test1{ Integer[] nums = new Integer[]{1,2,3,4,5};

Arrays.stream(nums)		  .map((x) -> x * x)		  .forEach(System.out:println);}

/* 2. 怎样用map和reduce方法数一数流中有多少个Employee */

List
emps = Arrays.asList( new Employee("张三",18,9999), new Employee("李四",38,9999), new Employee("王五",50,9999), new Employee("赵柳",16,9999), new Employee("田七",8,9999));public void test2{ Optional
count = emps.stream() .map((e) -> 1) .reduce(Integer::sum); System.out.println(count.get());}

}

public interface MyFun{ default String getName(){ return "hhb"; } }

转载于:https://my.oschina.net/hehongbo/blog/3019087

你可能感兴趣的文章
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>
[物理学与PDEs]第3章习题1 只有一个非零分量的磁场
查看>>
深入浅出NodeJS——数据通信,NET模块运行机制
查看>>
onInterceptTouchEvent和onTouchEvent调用时序
查看>>
android防止内存溢出浅析
查看>>
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>