函数式编程是时下比较流行的编程方式了,很多新兴的编程语言都对函数式编程有了比较好的支持,她有别于传统的命令式编程,可以将函数(执行代码的过程)作为参数进行传递。JAVA也意识到了函数式编程的重要性,在2014年Oracle终于发布了JAVA8的版本,增加了诸如函数式编程、Lambda表达式、Stream流等新的特性,正因为有了这些新的功能,我们以后在编写JAVA代码的时候,有了一种新的选择。

熟练地使用函数式编程开发,可以让代码变得更简洁、优雅,可读性也能更强。但是,从命令式编程转向函数式编程还是需要一定努力的,因为在编码的思路上,两种开发模式真的有很大的区别,这也是有相当一部分的JAVA开发者还是比较热衷于使用传统的开发方式的原因。

尽管如此,函数式编程始终是以后编码开发的方向,因为她更优雅且开发效率会更高,所以我觉得现在就应该开始多熟悉函数式编程了哦,以后一定会用上的。对于Lambda表达式,我也还是处在初学者的状态,用起来感觉很不方便,往往当我有某个明确目标的时候,我却不知道使用何种方法或如何使用该方法来达到自己的目的。因此,最近我自己也在做一些Lambda的例子,帮助我去学习,效果还行,在这里也是想做一下分享,欢迎指正。

lambda表达式的例子

一、关于stream、filter、map、reducepublic static void main(String[] args) {List list = Arrays.asList("max","min","vue","java","scala");long sum = list.stream().filter(str -> str.startsWith("m")).count();System.out.println("以m开头的数量是:" + sum);int sum2 = list.stream().mapToInt(String::length).reduce((s,item) -> s + item).getAsInt();System.out.println("所有字母的长度总和:" + sum2);int sum3 = list.stream().filter(str -> str.startsWith("m")).mapToInt(String::length).reduce((s,item) -> s + item).getAsInt();System.out.println("以m开头的单词总长度:" + sum3);}

1.stream()方法为集合打开了一个流,于是通过这个流,开发者就可以操作诸如过滤、映射、分组、计算等一系列的操作了。

2.filter()即是过滤的方法,在第一个例子中,找出以m字母开头的单词,并过滤成了新的流,然后计算单词的数量。

3.mapToInt()是映射的方法,根据单词的长度映射成了新的流,新的流中是一个关于单词长度的集合。

4.reduce()是计算的方法,根据单词长度集合的流,将单词长度进行相加,返回最终结果。

二、关于collect、groupingBy

创建一个User类,方便以后我们加到集合中

public class User {private String name;private int age;private int sex;public User(){}public User(String name, int age) {super();this.name = name;this.age = age;}public User(String name, int age,int sex) {super();this.name = name;this.age = age;this.sex = sex;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;[email protected] String toString() {return "User [name=" + name + ", age=" + age + ", sex=" + sex + "]";}}

生成一个List工具类,用于生成User集合

import java.util.ArrayList;import java.util.List;public class ListUtil {public static List getUserList(){User u1 = new User("lilei",20,1);User u2 = new User("limei",31,1);User u3 = new User("min",12,0);User u4 = new User("max",33,0);User u5 = new User("test",35,0);List list = new ArrayList();list.add(u1);list.add(u2);list.add(u3);list.add(u4);list.add(u5);return list;}}

在上述类的帮助下,写一个针对新建集合和分组的例子import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class SecondTest {/** * 获取每个用户的年龄,生成新数组,并打印 [email protected]("unchecked")private static void getAllUserAge(){List list = ListUtil.getUserList();//获取每个用户的年龄,生成新数组,并打印System.out.println("\n");List ageList2 = list.stream().map(User::getAge).collect(Collectors.toList());ageList2.stream().forEach(obj -> {System.out.print(obj + "\t");});System.out.println("\n");}/** * 按性别分类,计算年龄总和 [email protected]("unchecked")public static void getManUserAgeSum(){List list = ListUtil.getUserList();list.forEach(user -> System.out.println(user));Map map = list.stream().collect(Collectors.groupingBy(User::getSex,Collectors.reducing(0,User::getAge,Integer::sum)));map.forEach((k,v)->System.out.println("k: "+ k + " v: "+v));[email protected]({ "unchecked", "rawtypes" })public static void main(String[] args) {//获取每个用户的年龄,生成以年龄组成的新数组getAllUserAge();//按性别分类,计算年龄总和getManUserAgeSum();}}

1.getAllUserAge()方法获取每个用户的年龄,并将用户的年龄组成一个新的集合,collect(Collectors.toList())用于将流转成ArrrayList类。

2.getManUserAgeSum()方法,将所有用户按性别进行分类,并计算了每个性别的年龄之和。通过groupingBy方法实现,在这里groupingBy()接收两个参数,第一个参数指定group by 的目标,第二个参数表示分组之后,需要进行的操作。最后,方法会返回一个Map对象,性别是键,年龄之和就是值。

java函数式编程例子_java函数式编程Lambda表达式的示例(一)相关推荐

  1. java list作为参数传递_Java 程序将lambda表达式作为方法参数传递

    Java 程序将lambda表达式作为方法参数传递 在此示例中,我们将学习将lambda表达式作为Java中的方法参数传递. 要理解此示例,您应该了解以下Java编程主题: 示例1:将lambda表达 ...

  2. java 匿名函数 构造_Java匿名内部类与Lambda表达式

    匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象 ...

  3. 10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表 达式,它将允许我们将行为传到函数里.在J ...

  4. Java基础学习总结(44)——10个Java 8 Lambda表达式经典示例

    Java 8 刚于几周前发布,日期是2014年3月18日,这次开创性的发布在Java社区引发了不少讨论,并让大家感到激动.特性之一便是随同发布的lambda表达式,它将允许我们将行为传到函数里.在Ja ...

  5. intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 有用

    intellij-IDE运行Java程序报错:java: -source 1.5 中不支持 lambda 表达式 2017年12月29日 15:04:15 佛空如水 阅读数:795 报错: 解决: 第 ...

  6. Java从入门到精通十四(Lambda表达式)

    Java从入门到精通十四(Lambda表达式) Lambda的引入体验 实例一(抽象方法无参无返回值) 实例二(抽线方法有参无返回值) 实例三(抽象方法带参带返回值) lambda的表达式的简化操作 ...

  7. Java for函数用法_Java函数式编程(四)集合的使用

    第二章:集合的使用 我们经常会用到各种集合,数字的,字符串的还有对象的.它们无处不在,哪怕操作集合的代码要能稍微优化一点,都能让代码清晰很多.在这章中,我们探索下如何使用lambda表达式来操作集合. ...

  8. 项目中使用 java函数式编程_函数式编程在Java8中使用Lambda表达式进行开发

    事情起因 如果不喜欢看故事的同学,请前往下一章节. 事情起因是我打算集成Redis缓存,配置了Redis以后,发现@Cacheable注解始终不生效,折腾了大半天以后,我的心态已经崩了,决定不使用@C ...

  9. 工具技巧和读文档 | 读函数式编程接口文档 | 匿名内部类 | lambda表达式 |IDEA

    Function接口,函数式接口 按入参返回值分类,大概分为4种类型,再加上多个入参就又多了Bi开头的两种. 有Ctrl+P的时候不懂参数列表该写啥,就先Ctrl+ALT看下入参类型的相关实现类! 一 ...

最新文章

  1. cve-2018-2628 Weblogic反序列化漏洞实现反弹shell
  2. 2048游戏C语言代码
  3. 静态工具类注入service的方法
  4. AI+遥感:释放每个像元价值(人工智能应用案例)
  5. php curl keepalive,HTTPKeepAlive,开启还是关闭
  6. 【JSP】JSP与JavaBean的关系
  7. 9个开源自动化测试框架,质量保证测试工程师用起来
  8. 关于 C# 请求 https 那点事
  9. 数学之美系列 1.3w字精简版阅读笔记
  10. 百度AI C#客户端车辆检测找不到VehicleDetect解决
  11. PHP--ThinkPHP6.0怎么打开debug模式
  12. 关闭WPS右键菜单,以及热点,广告弹窗推送
  13. 4.5 Frank 口语习语前7
  14. Windows 使用 ssh 命令行 通过密钥连接到 云服务器
  15. 软件工程经济学期末复习
  16. mysql timestamp 差值_SQL计算timestamp的差值实例分享
  17. Java实验:教练和运动员案例
  18. maven使用slf4j输出日志到文件
  19. JavaBean之Builder模式
  20. Java基础篇--面向对象(Object Oriented)

热门文章

  1. HDFS 中常见的Timeout
  2. 在Firefox中通过AJAX跨域访问Web资源
  3. Spring 定时执行任务重复执行多次
  4. 【ThinkPHP 开发辅助系统】问答
  5. Android 学习--ListView 的使用(一)
  6. 关于JDK中的集合总结(二)
  7. linux expect案例用法
  8. 美女在中国移动家属院上厕所
  9. 网管日志-06.08.16
  10. 数据结构与算法之-----图(搜索算法)