Java8函数OA现金盘平台出租式编程实践精华

现在是OA现金盘平台出租haozbbs.comQ1446595067 资源共享的时代,同样也是知识分享的时代,如果你觉得本文能学到知识,请把知识与别人分享。

绪论

从java8开始,我们就可以通过java8中的StrameAPI与Lambda表达式实现函数式编程,可以让代码变得更加高效简洁。

现在很多企业的生产代码已经开始使用java8了,对于还没有使用过java8进行的编程的朋友们可以好好的学习一下,我在企业中写java8也有一段时间了,我想把我在实际开发中用到的一些场景与大家分享一下,大部分例子都来源于我开发项目中的实例。

其中我开发中用得比较多的是,Optional,SteameAPI与lambda。本文是实战帖,不做过多理论分析,直接讲场景与应用。Java9已经出来一段时间了,我发现我周围的很多做开发的朋友对java8中的一些新特性仍然不是很了解,也没在生产代码中使用过java8,不过我相信,很快,大部分公司都会用上java8的,我觉得java8与java5一样,是jdk历史上重要的一个版本更新,能给java编程带来巨大变化的一个版本。

场景

1、数据类型转换

直接上代码

//拿到所有的processNumber
List<String> processNumbers = param.getListProcessNumbers().stream().
map(QueryStateData::getProcessNumber).collect(Collectors.toList());

上面的代码的作用中把List<Object>,把其中我们需要的一个string字段变成List<String>,map是StringAPI中用来做数据类型转换的。

QueryStateData::getProcessNumber是方法引用,作用与object->object.getProcessNumber();一样,collect是收集器,通过收集器,把流转换成我们想要的List<String>。

2、对List数据进行数据筛选

//获取paymentChange
Optional<GaPaymentChange> changeOptional = listPaymentChange.stream().filter(p -> p.getTransferNo().equals(std.getProcessNumber())).findFirst();
if(changeOptional.isPresent()){
GaPaymentChange paymentChange = changeOptional.get();
}

filter从名字上看,就知道是用来过数据过滤的,filter的函数式接口中需返回一个boolean值。findFirst是取其中的第一个,可以返回一个Optional对象。通过get方法我们很轻松的拿到了我们想要的结果。

3.Optional对象的应用

java8中Optional的出现是为了减少空指针异常的。看代码应用:

BigDecimal bigAbmout = Optional.ofNullable(paymentChange.getPaymentChangeMoney()).orElseGet(() -> new BigDecimal("0")).setScale(2, BigDecimal.ROUND_HALF_UP);

当ofNullable值为null时,我们可以给bigAbmout赋一个默认值。orElseGet的传参数是一个函数式接口,上面代码可以把它写成

lambda要返回一个对象。

Optional.ofNullable(paymentChange.getPaymentChangeMoney()).orElse(new BigDecimal("0")).setScale(2, BigDecimal.ROUND_HALF_UP);

orElse与orElseGet不同的是,它的参数直接是目标对象。

4.StreamAPI遍历对象

page.getRows().stream().forEach(x -> x.setOrderTime((DateUtils.dateFormat(x.getCreateTime(),DateUtils.DAT_SHORT_FORMATSS))));

上面的代码就是简单的把集合对象中orderTime的值做一下转换。

5.快速找到集合中想要匹配数据

//是否存在增补单
boolean match = gaPaymentChangeDetailList.stream().anyMatch(detail -> GaConstants.SUPPLEMENT_BILL.equals(detail.getIsSupplementBill()));

anyMatch配合lambda表达式可以在集合中快速找到我们想匹配的数据。

6.List中对象转换

List<Menu>menus= menuService.queryMenuList(query);List<MenuTreeVO> menuTrees = menus.stream().map(MenuTreeVO::new).collect(Collectors.toList());

利用StreamAPI两行代码就把List<Menu>转成了 List<MenuTreeVO>,其中的map(MenuTreeVO::new)等价于map(menu->new MenuTreeVO(menu)),所以,实现的一个另一个细节,我重写了MenuTreeVO的构造方法:

public MenuTreeVO(Menu menu) {
this.id = menu.getId();
this.pId = menu.getParentId();
this.name = menu.getName();
this.open = true;
}

7.枚举中的应用

枚举中我们通常会与一个静态方法通过code去获取它对应的枚举,没有用java8我们一般是通过for循环实现的,看看java8代码:

/**

  • 获取枚举
  • @param code
  • @return
    */
    public static OrderStateEnum getEnum(Integer code) {
    return Stream.of(OrderStateEnum.values()).filter(e ->e.code.equals(code)).findFirst().orElse(null);
    }

8.lambda实现函数式接口

我们原来代码中的遇到的函数式接口,我们就可以用lambda来代替,简单的来说,就是new接口的地方。比如MQ发消息,我们传统的做法:

jmsTemplate.send(new MessageCreator() { @Override
public Message createMessage(Session session) throws JMSException { return session.createTextMessage(String.valueOf(id));
}
});

这个函数式接口可以用lambda一行代码轻松实现:

jmsTemplate.send(session -> session.createTextMessage(String.valueOf(id)));

8.去重、求和、最大值、最小值

用法都比较类似,这里就不一一列举了。下面看一个去重的。stream下面的方法也就那么多个,要用的时候可以一个个点来看看,从英文意思我们可大概知道那些方法基本上用来做什么的了。其实很多用法我也是在实际开发中慢慢研究出来的,也没看很多的资源。

List<Color> colors = skusResult.getValue().stream().map(Sku::getColor).distinct().collect(Collectors.toList());

上面是对List<Color>中的Color对象去重,记得重写hashCode()与equeals()方法。

结语

在实际的开发中,能应用的场景还有很多,我上面列举的一些可能用得会相对多一些,也有很多应用场景我没有提到,java8函数式编程的也许远远不止这些,以后遇到好的场景我再补充,如果大家有好的应用,欢迎留言讨论。

哈 博小伙伴一开心 博主收集了一套很不错java学习视频教程 在这里送给大家 在公众号内回复 “java” 即可获取奥

640?wx_fmt=png

原文地址:http://blog.51cto.com/13864301/2140307

时间: 2024-10-28 08:44:29

Java8函数OA现金盘平台出租式编程实践精华的相关文章

.Net4.6 Task 异步OA现金盘平台出租函数 比 同步函数 慢5倍 踩坑经历

异步Task简单介绍本标题有点 哗众取宠OA现金盘平台出租QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com ,各位都别介意(不排除个人技术能力问题) -- 接下来:我将会用一个小Demo 把 本文思想阐述清楚. .Net 4.0 就有了 Task 函数 -- 异步编程模型 .Net 4.6 给 Task 增加了好几个 特别实用的方法,而且引入了 await async 语法糖 当然,这是非常不错的技术,奈何我有自己的线程队列封装,也就没有着

使用Cmake生成OA信用盘平台出租跨平台项目编译解决方案

项目最近OA信用盘平台出租haozbbs.comQ1446595067 有需求在windows下面运行,我花了几周时间将linux的服务器移植到windows下面,目前已经能够正常运行服务器,目前又有了新需求,两边的代码结构和组织是分开的,因此为了两边能够同步维护,需要一个能够跨平台的项目编译解决方案,经过调研之后,选择了使用cmake这个工具,本文主要讲述,使用cmake的生产项目的一些基础知识.一.cmake简介 你或许听过好几种 Make 工具,例如 GNU Make ,QT 的 qmak

JDK动态OA信用盘平台出租代理和cglib动态代理

一.代理设计模式OA信用盘平台出租haozbbs.com Q1446595067 代理类和委托类具有相同的接口.代理类的对象本身并不真正实现服务,而是通过委托类的对象的相关方法来提供特定的服务. 二.静态代理 见<大话设计模式>第7章 缺点: 一个代理类只能应用于一个接口的实现类,如果有多个接口的话就要定义很多实现类和代理类才行.而且,如果代理类对业务方法的预处理.调用后操作都是一样的(比如:调用前输出提示.调用后自动关闭连接),则多个代理类就会有很多的重复代码.这时我们可以定义这样一个代理类

windows下ini配置现金盘平台出租的读写

对ini文件进行写操作用到函数现金盘平台出租(企 娥:217 1793 408)BOOLWINAPIWritePrivateProfileStringA(in_opt LPCSTR lpAppName,__in_opt LPCSTR lpKeyName,in_opt LPCSTR lpString,__in_opt LPCSTR lpFileName); 其中lpAppName为分节名字,lpKeyName为键的名字,lpString为对应键的字符串的值,lpFileName为完整的文件名,这个

ArrayList原理、OA信用盘平台出租LinkedList原理和方法和迭代器注意事项

迭代器在变量元素OA信用盘平台出租QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com的时候要注意事项: 在迭代器迭代元素 的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法进行操作. 如果使用过了集合对象改变集合中元素个数那么就会出现ConcurrentModificationException异常. 迭代元素的过程中: 迭代器创建到使用结束的时间. ------意识是迭代器一旦创建,在之后是不可以用集

Typescript 和 Javascript之间OA信用盘平台出租的区别

JavaScript 和 TypeScript 的概要介绍JavaScript 是一种轻量级的解释性脚本语言OA信用盘平台出租QQ2952777280[话仙源码论坛]hxforum.com[木瓜源码论坛]papayabbs.com,可嵌入到 HTML 页面中,在浏览器端执行,能够实现浏览器端丰富的交互功能,为用户带来流畅多样的用户体验. JavaScript 是基于对象和事件驱动的,无需特定的语言环境,只需在支持的浏览器上就能运行. JavaScript 语言具有以下特点: JavaScript

Oracle数据OA信用盘平台出租远程连接的四种设置方法和注意事项

OA信用盘平台出租论坛:haozbbs.com Q1446595067 第一种情况: 若oracle服务器装在本机上,那就不多说了,连接只是用户名和密码的问题了.不过要注意环境变量%ORACLE_HOME%/network/admin/是否设置. 第二种情况: 本机未安装oracle服务器,也未安装oracle客户端.但是安装了pl sql development.toad sql development.sql navigator等管理数据库的工具.在虚拟机或者另一台电脑上安装了oracle服

Bash Shell中命令行选项/OA现金盘平台租用

写程序的时候经常要处理命令行参数,本文描述在Bash下的命令行处理方式. 选项与参数: OA现金盘平台租用(企 娥:217 1793 408) 如下一个命令行: . / test.sh - f config.conf - v -- prefix =/ home 我们称-f为选项,它需要一个参数,即config.conf, -v 也是一个选项,但它不需要参数. --prefix我们称之为一个长选项,即选项本身多于一个字符,它也需要一个参数,用等号连接,当然等号不是必须的,/home可以直接写在--

开源 java OA现金盘平台搭建2.8 会员管理

从左侧管理OA现金盘平台搭建Q1446595067菜单点击会员管理进入. 添加会员 在会员列表下方点击"添加"按钮. 填写相关属性后点击"保存"按钮即可. 编辑会员 选择需要编辑的会员,然后点击"编辑"按钮. 注意:同时只能编辑一个会员. 填写相关属性后点击"保存"按钮即可. 提示:如果需要修改密码,请勾选"我要修改密码",然后输入新的密码即可. 会员启用 选择需要启用的会员,然后点击"启用&qu