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的 ...
随机推荐
- JavaWeb之Servlet(3)
Servlet(3) HttpServletRequest 该类的对象封装了所以客户端提交过来的数据 获取所有请求头数据 public java.util.Enumeration<E> g ...
- jqgrid后台处理搜索
jqgrid后台处理搜索, 如果点击jqgrid自带的搜索,则向后台传递“_search”参数,和searchField.searchOper.searchString三个值.如下所示: string ...
- Python单元测试工具doctest和unittest
Python标准库包含两个测试工具. doctest:一个简单的模块,为检查文档而设计,但也适合用来编写单元测试. unittest:一个通用的测试框架. 一.使用doctest进行单元测试 创建文件 ...
- [20190520]exp imp on th fly.txt
[20190520]exp imp on th fly.txt --//以前做的测试,查找浪费许多时间,做1个记录.--//注:仅仅linux 操作系统,bash shell版本不能太低就可以实现,现 ...
- mysql 实现全连接
mysql不支持全连接,但可以通过左外连接+ union+右外连接实现 SELECT * FROM t1 LEFT JOIN t2 ON t1.id = t2.id UNION SELECT * FR ...
- 编译安装 proxychains-ng proxychains4
下载 [root@localhost html]# git clone https://github.com/rofl0r/proxychains-ng.git 编译安装 [root@localhos ...
- unittest,requests,assertEqual实战演练
请求方式:POST请求url:https://api.apiopen.top/developerLogin请求参数:名称 类型 必须 描述 示例name string 是 账号 peakchaopas ...
- Jmeter(二)响应内容乱码解决办法
Jmeter请求编码设置为UTF-8,响应内容依然乱码,可在Jmeter安装路径bin\jmeter.properties中设置默认编码为UTF-8,于是问题得以解决:
- Vue+cordova开发App
Vue+cordova开发App https://www.imooc.com/article/70062
- window系统下的pycharm对虚拟机中的Ubuntu系统操作MySQL数据库
问题:程序员和数据库的爱情故事:程序为了追一个叫MySQL数据库的姑娘,先苦练功夫,自己模拟泡妹过程积累经验,于是想到一个解决方法:[解决虚拟机跑需要连接数据库的程序卡的问题,通过在物理机Window ...