2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 优雅永不过时 - Lambda 表达式

优雅永不过时 - Lambda 表达式

时间:2023-10-30 03:36:41

相关推荐

优雅永不过时 - Lambda 表达式

文章摘要

预备工作Lambda 表达式简介一、Lambda语法格式二、函数式编程 1、函数式编程案例一: 2、函数式编程案例二: 3、函数式编程案例三: 三、Stream 流式处理 1、Streatm类 对象的创建 2、Streatm类 使用案例 总结

预备工作

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

函数式接口的注解:@FunctionalInterface写在接口上可以通知编译器进行抽象方法检查。

Java中拥有大量函数式接口,位于:java.util.function包中。📂

🚫Lambda表达式只 支持函数式接口

Lambda 表达式简介

JDK8开始 支持Lambda 表达式,让程序 更优雅。开发起来,更顺畅。利用Lambda 表达式可以更简洁的实现匿名内部类函数声明与调用Lambda 表达式提供了:strean流式处理极大简化对集合的操作。

传统代码 与 Lambda 表达式 de 比较

传统代码List<String> names = Arrays.asList("peter","anna","mike","xenia");//实现集合排序Collections.sort(names,new Comparator<String>()){@overridepublic int compare(String a,String b){return pareTo(a);}});Lambda 表达式List<String> names = Arrays.asList("peter","anna","mike","xenia");//通过lambda表达式简化匿名类的编写Collections.sort(names,(a,b) -> pareTo(a))

一、Lambda语法格式

经典使用 案例:四则运算🎮

Lambda表达式还能 简化👇👇👇:省略了参数类型

YunSuan add = (a,b)->{return a+b+0f;};System.out.println(add.siZe(5,3))

Lambda表达式还能 再简化👇👇👇:单行实现可省略大括号

YunSuan add = (a,b)-> a+b+0f;System.out.println(add.siZe(5,3))

二、函数式编程

🔧函数式编程:基于函数式接口并使用Lambda表达式编写写代码。

强调“你想做什么”,而不是“你想怎么做”。将代码作为可重用数据,带入程序中(案例一演示)。

 1、函数式编程案例一:

 说明:案例中使用Predicate<T>这个函数式接口。该函数接口,用于测试传入的数据是否满足判断要求。和if语句差不多,满足条件返回true反之flase。该函数接口,需要实现test()方法进行逻辑判断。

对 list 集合 选取 - 奇偶数public class PredicateSample {public static void main(String[] args) {// 先实验下 该接口的用法// Predicate<Integer> predicate = n -> n>4;// boolean result = predicate.test(5);// System.out.println(result);//对 list 集合 选取 - 奇偶数List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);filter(list,n -> n%2==1);//n 不是就是 下面number 的意思吗?}public static void filter(List<Integer> list , Predicate<Integer> predicate){for (Integer number : list){if (predicate.test(number)){System.out.print(number+" ");}}}}

 2、函数式编程案例二:

 说明:案例中使用Consumer<T>这个函数式接口。该函数接口,用于有一个输入参数,无输出的功能代码。

如何灵活的控制输出?public class ConsumerSample {//如何灵活的控制输出?public static void output(Consumer<String> consumer){String test = "他日若遂凌云志,敢笑黄巢不丈夫!";consumer.accept(test);}public static void main(String[] args) {output(s -> System.out.println("向控制台打印:"+s));output(s -> {//因为重写的方法返回值是void 所以下面没有returnSystem.out.println("向CSN打印:"+s);});}}

 3、函数式编程案例三:

 说明:案例中使用Function<T,R>这个函数式接口。该函数接口,用于有一个输入参数,且需要返回数据的功能代码。它有两个泛型:第一个泛型是说明参数的类型。第二个泛型说明返回的数据类型是什么。

利用 Function 接口 生成定长随机字符串public class LambdaSample {public static void main(String[] args) {//要生成多长的字符串Function<Integer,String> randomStringFunction = n -> {//生成字符的范围 字符集String chars = "zbcdefghijklmnopqrstuvwxyz0123456789";//随机挑选字符 最后连接起来StringBuffer stringBuffer = new StringBuffer();//生成随机数Random random = new Random();//来生成定长的随机字符串for (int i = 0; i < n ; i ++){//每次循环 会产生新的随机数,这个数据的范围是 我们设置的字符串长度内//返回的数字代表了要截取的 哪一个 字符的位置int index = random.nextInt(chars.length());//chars.charAt(index) 是按照位置将字符提取出来,然后追加到stringBuffer里面stringBuffer.append(chars.charAt(index));}//返回我们需要的字符串return stringBuffer.toString();};String randomString = randomStringFunction.apply(16);System.out.println(randomString);}}

三、Stream 流式处理

✈️Stream 流式处理是建立在Lambda基础上的多数据处理技术。对集合数据处理进行高度抽象,极大简化代码量。Stream可以对集合进行迭代、去重、筛选、排序、聚合等一系列操作。因为,最终产物是 一步一步加工出来的。像似流水线,所以称:流式处理。👈

Stream典型书写演示:👇👇👇

获取List集合中最大的奇数Optional<Integer> op = Arrays.asList(1,2,3,4,5,6).stream().filter(x -> x%2 == 1).sorted((a,b) -> b-a).findFirst();System.out.println(op.get());

Stream 常用方法:🏊🏊🏊

 1、Streatm类 对象的创建

第1️⃣种创建方式:基于数组进行创建

public void test1(){String[] arr = {"A","B","C","D"};//调用of()方法 对数组 解析 进行创建Stream<String> stream = Stream.of(arr);//括号里用的式Cosumer接口,然后用Lambda表达式实现,用法在案例二。stream.forEach(s -> System.out.println(s));}要掌握 Stream.of() 生成与之对应的流对象。forEach()中可以使用Lambda表达式

第2️⃣种创建方式:基于集合进行创建

public void Test2(){List<String> list = new ArrayList<String>();list.add("A");list.add("B");list.add("C");list.add("D");//如何得到Stream对象呢? list 天生自带strea()方法Stream<String> stream = list.stream()stream.forEach(s -> System.out.println(s));}

 2、Streatm类 使用案例

🔶案例一、提取集合中所有偶数并求和

public void test(){List<String> list = new Arrays.asList("1","2","3","4");int sum = list.stream();//获取stream对象.mapToInt(s -> Integer.parseInt(s))//映射到整数类型.filter(n -> n%2 == 0)//对流中数据进行过滤.sum();//求和System.out.println(sum);}

🔶案例二、所有名字首字母大写

public void test(){List<String> list = new Arrays.asList("tom","jack","maaper");List newlist = list.stream()//获取每个元素。截取每个字符串的第一个字符。转大写。后半部分链接起来.map(s -> s.substring(0,1).toUpperCase()+s.substring(1))//.forEach(s -> System.out.println(s));//可以将流中的数据 包装成新的list 或者set 并返回集合 .collect(Collectors.toList())System.out.println(newlist);}

🔶案例三、将所有奇数从大到小排列,且不许出现重复

public void test(){List<String> list = Arrays.asList(2,61,33,87,35,90,77,99,38,61);List newlist = list.stream().distinct()//去除重复的流数据.filter(n -> n%2 ==1).sorted((a,b) -> b-a)//流数据去重.collect(Collectors.toList());System.out.println(newlist);}

  ♨️Stream流式处理 就是提供了一系列方法,通过不同方法的进行组合=>得到一些复杂的运算操作。更多的方法细节可以去看API。百度搜索:java.util.stream。

总结

码字不易🐌,如果对您有所帮助不妨点个赞赞吧💖💖💖~

我爱你 ~  无论我们在这个日子是否在一起,我也知道,爱一个人是劫,有人劫后重生,有人在劫难逃。😞

 🙏愿: 宇宙的尽头没有 流式处理。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。