Lambda(一)lambda表达式初体验
Lambda(一)lambda表达式初体验
Lambda引入 :
随着需求的不断改变,代码也需要随之变化
需求一:有一个农场主要从一堆苹果中挑选出绿色的苹果
解决方案:常规做法,source code如下
public static void main(String[] args){
List<Apple> apples = Arrays.asList(
new Apple("green", 120),
new Apple("red", 150),
new Apple("green", 170),
new Apple("green", 150),
new Apple("yellow", 100));
List<Apple> filterApple = filterGreenApple(apples);
System.out.println(filterApple);
}
public static List<Apple> filterGreenApple(List<Apple> apples){
List<Apple> list = new ArrayList<>();
for(Apple a: apples){
if(a.getColor().equals("green")){
list.add(a);
}
}
return list;
}
假如现在需求发生改变:需要挑选红色、黄色等其他颜色
解决方案:基于上面解决方案,多加一个color参数,source code如下
public static List<Apple> findApple(List<Apple> apples,String color){
List<Apple> list = new ArrayList<>();
for(Apple a: apples){
if(a.getColor().equals(color)){
list.add(a);
}
}
return list;
}
为了应对更复杂的需求,这里我们使用策略模式,source code如下
@FunctionalInterface
public interface FindApple{
boolean filter(Apple apple);
} public static List<Apple> findApple(List<Apple> apples,FindApple findApple){
List<Apple> list = new ArrayList<>();
for(Apple apple:apples){
if(findApple.filter(apple)){
list.add(apple);
}
}
return list;
} public static void main(String[] args){
//匿名类
List<Apple> yellowApple = findApple(apples, new FindApple() {
@Override
public boolean filter(Apple apple) {
return apple.getColor().equals("yellow") && apple.getWeight() >= 100;
}
});
System.out.println(yellowApple); List<Apple> complexApple = findApple(apples, new greenAndGreater150WeightApple ());
System.out.println(complexApple);
} //过滤绿色且重量大于150g的Apple
public static class greenAndGreater150WeightApple implements FindApple{
@Override
public boolean filter(Apple apple) {
return apple.getColor().equals("green")&&apple.getWeight()>=150;
}
}
匿名类的方式比较臃肿,容易发生混淆,故这里引入Lambda表达式,source code如下
//基于上面的source code
List<Apple> lambdaresult = findApple(apples, apple -> apple.getColor().equals("green"));
System.out.println(lambdaresult);
Lambda(一)lambda表达式初体验的更多相关文章
- Java8 :lambda表达式初体验
package lambda; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import j ...
- Java8初体验(一)lambda表达式语法
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...
- Java8初体验(1):lambda表达式语法
原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...
- Lambda(二)lambda表达式使用
Lambda(二)lambda表达式使用 Lambda 表达式组成: /* param list arrow lambda body (o1,o2) -> o1.getColor().Compa ...
- 利用lambda和条件表达式构造匿名递归函数
from operator import sub, mul def make_anonymous_factorial(): """Return the value of ...
- Java8初体验(二)Stream语法详解
感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验(一)lambda表达式语法比 较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例 ...
- JAVA 11初体验
JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...
- 屌丝就爱尝鲜头——java8初体验
Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分 ...
- Java8初体验(2):Stream语法详解
原文出处: 一冰_天锦 上篇文章Java8初体验(1):lambda表达式语法比较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例子中有很多Stream的例子.这些Stream的 ...
随机推荐
- ES2019新特性的学习
前言 前端技术更新的实在是太快了,各种框架百花齐放,随着NodeJs不断的兴起,各种构建工具也是层出不穷,这不,前两周尤雨溪开源了Vue.js3.0源码之后,很多大佬早已把源码剖析皮都不剩了:昨天No ...
- 「SAP技术」SAP不够严谨?
SAP不够严谨? 大家知道采购业务里,有一种特殊的采购形式,就是按单采购,意思是所采购的物料只用于指定的销售订单的销售出库.这种业务场景在SAP项目实践中,比较常见. 强大无比的SAP系统当然有解决方 ...
- elasticsearch中文搜索优化
遇到的问题 检索葡萄糖关键字,希望结果仅包含葡萄糖,不包含葡萄:检索葡萄,希望结果包含葡萄糖. 同义词如何配置 如何确保搜索关键词被正确分词 分析器分词流程 分析器扮演着非常重要的角色,ES提供的有内 ...
- qt 使用OpenCV
使用MinGW编译OpenCV源码 下载OpenCV源码.CMake编译工具 编译安装完: Qt工程配置 INCLUDEPATH += D:/qt_work/opencv/build/install/ ...
- bacula备份工具
源码下载:http://www.bacula.org bacula适合数据业务量巨大,每天都在迅速增长,还需要以tar打包方式进行低级备份而且没有异地容灾策略.Bacula是一个完美的增量备份功能,同 ...
- Android 蓝牙开发(1)
普通蓝牙设备官方文档 Android 平台包含蓝牙网络堆栈支持,凭借此支持,设备能以无线方式与其他蓝牙设备交换数据.应用框架提供了通过 Android Bluetooth API 访问蓝牙功能的途径. ...
- JavaScript—数据可视化(ECharts)
Echarts具有丰富的图表,可以说是数据可视化的神器: 1.下载Echarts 官网下载地址:https://echarts.baidu.com/index.html 2.Echarts引用案例—柱 ...
- 3. 海思Hi3519A MPP从入门到精通(三 视频输入)
视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVDS 接口和 HISPI 接 口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据. ...
- 将网站发布到阿里云的Linux服务器上(简述)
这里以idea的springboot项目为例(打成jar包) 这里去阿里云购买服务器的过程就不说了,自行百度 还有这篇只是简述,因为把一个项目部署到服务器要做的事情还是不少的,然后没学过Linux的建 ...
- 08 在设备树里描述platform_device【转】
转自:https://blog.csdn.net/jklinux/article/details/78575281 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...