【Java8 新特性 1】Lambda表达式总结

本文详细介绍了Java8中的Lambda表达式、四种内置函数式接口(Consumer、Supplier、Function和Predicate)以及方法引用和构造器引用的用法,包括对集合的迭代、map和reduce操作的示例。

//Comparator com = (x, y) -> Integer.compare(100, 244);

System.out.println(“若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写,”+Integer.compare(100, 244));

}

}

2、控制台输出


二、Java8四大内置函数式接口

================

如果使用lambda还要自己写一个接口的话太麻烦,所以Java自己提供了一些接口:

1、Consumer 消费性接口:void accept(T t);


//有一个参数,并且无返回值

public static void test3() {

//这个e就代表所实现的接口的方法的参数,

Consumer consumer = e->System.out.println(“Lambda 表达式方式,”+e);

consumer.accept(“传入参数”);

}

2、Supplier供给型接口: T get();


package javase.Lambda;

import java.util.ArrayList;

import java.util.function.Supplier;

public class Test2 {

public static void main(String[] args) {

ArrayList res = getNumList(10,()->(int)(Math.random()*100));

System.out.println(res);

}

public static ArrayList getNumList(int num, Supplier sup){

ArrayList list = new ArrayList<>();

for (int i = 0; i < num; i++) {

Integer e = sup.get();

list.add(e);

}

return list;

}

}

3、Function 函数式接口:R apply(T t);


package javase.Lambda;

import java.util.function.Function;

public class Test2 {

public static void main(String[] args) {

String newStr = strHandler(“abc”,(str)->str.toUpperCase());

System.out.println(newStr);

newStr = strHandler(" abc ",(str)->str.trim());

System.out.println(newStr);

}

public static String strHandler(String str, Function<String,String>fun){

return fun.apply(str);

}

}

4、Predicate 断言式接口:boolean test(T t);


判断一些字符串数组判断长度>2的字符串:

package javase.Lambda;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.function.Predicate;

public class Test2 {

public static void main(String[] args) {

List list = Arrays.asList(“hello”,“jiangshuying”,“lambda”,“www”,“ok”,“q”);

List ret = filterStr(list,(str)->str.length()>2);

System.out.println(ret);

}

public static List filterStr(List list, Predicate pre){

ArrayList arrayList = new ArrayList<>();

for(String str:list){

if(pre.test(str)) {

arrayList.add(str);

}

}

return arrayList;

}

}

三、方法引用与构造器引用

============

要求:实现抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致!

方法引用:使用操作符“::”将类与方法分隔开来。

对象::实例方法名

类::静态方法名

类::实例方法名

举个例子:

public static void test9(){

Comparator comparator = (x,y)->Integer.compare(x,y);

Comparator comparator1 = Integer::compare;

int compare = comparator.compare(1,2);

int compare1 = comparator1.compare(1,2);

System.out.println(“compare:”+compare);

System.out.println(“compare1:”+compare1);

}


四、lambda表达式的一些常见用法

==================

1、使用lambda表达式对集合进行迭代


package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

List list = Arrays.asList(“java”,“c#”,“javascript”);

//before java8

for (String str:list){

System.out.println(“before java8,”+str);

}

//after java8

list.forEach(x-> System.out.println(“after java8,”+x));

}

}

2、用lambda表达式实现map


map函数可以说是函数式编程里最重要的一个方法了。map的作用是将一个对象变换为另外一个。在我们的例子中,就是通过map方法将cost增加了0,05倍的大小然后输出。

package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

List list = Arrays.asList(10.0,20.0,30.0);

list.stream().map(x->x+x*0.05).forEach(x-> System.out.println(x));

}

}

3、用lambda表达式实现map与reduce


既然提到了map,又怎能不提到reduce。reduce与map一样,也是函数式编程里最重要的几个方法之一。。。map的作用是将一个对象变为另外一个,而reduce实现的则是将所有值合并为一个,请看:

package javase.Lambda;

import java.util.Arrays;

import java.util.List;

public class Test3 {

public static void main(String[] args) {

//before java8

List cost = Arrays.asList(10.0, 20.0,30.0);
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

image.png

image.png

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
获取!!(备注Java获取)**

img

惊喜

最后还准备了一套上面资料对应的面试题(有答案哦)和面试时的高频面试算法题(如果面试准备时间不够,那么集中把这些算法题做完即可,命中率高达85%+)

[外链图片转存中…(img-4RMXHBpe-1712702484934)]

[外链图片转存中…(img-dnH9juBL-1712702484934)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值