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表达式初体验的更多相关文章

  1. Java8 :lambda表达式初体验

    package lambda; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import j ...

  2. Java8初体验(一)lambda表达式语法

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解 ...

  3. Java8初体验(1):lambda表达式语法

    原文出处: 一冰_天锦 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘.因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏差的地方,希望大家帮忙指出,我会持续修改和优化 ...

  4. Lambda(二)lambda表达式使用

    Lambda(二)lambda表达式使用 Lambda 表达式组成: /* param list arrow lambda body (o1,o2) -> o1.getColor().Compa ...

  5. 利用lambda和条件表达式构造匿名递归函数

    from operator import sub, mul def make_anonymous_factorial(): """Return the value of ...

  6. Java8初体验(二)Stream语法详解

    感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com 上篇文章Java8初体验(一)lambda表达式语法比 较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例 ...

  7. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  8. 屌丝就爱尝鲜头——java8初体验

    Java8已经推出,让我们看看他的魅力.让我们看看他改变较大的部分. 一.java8概述 Java8是由Oracle(甲骨文)公司与2014年3月27日正式推出的.Java8同时推出有3套语言系统,分 ...

  9. Java8初体验(2):Stream语法详解

    原文出处: 一冰_天锦 上篇文章Java8初体验(1):lambda表达式语法比较详细的介绍了lambda表达式的方方面面,细心的读者会发现那篇文章的例子中有很多Stream的例子.这些Stream的 ...

随机推荐

  1. 定制Dynamics CRM标准导出功能:不能导出指定列的值

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复239或者20161203可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong. ...

  2. App iCON 尺寸

    120*120  180*180 58*58  87*87 80*80  120*120

  3. 解决iOS地图持续定位耗电问题

    地图位置刷新的代理didUpdateLocations会持续调用,手机非常耗电 但是在实际开发中,有一些APP确实需要用到持续定位的功能,比如:运动类, 导航类, 天气类等等 如何进行持续定位呢?保证 ...

  4. 【JavaWeb】FreeMarker快速入门

    FreeMarker Freemarker是免费开源的模板引擎技术: Freemarker脚本为Freemarker Template Language: Freemarker提供了大量内建函数来简化 ...

  5. 有 va_arg宏 中数组下标-1 引发的思考 - C 语言中内存模型

    va_arg宏,是头文件 stdarg.h 中定义的,获取可变参数的当前参数. #define va_arg(list, mode) ((mode*)(list+=sizeof(mode)))[-1] ...

  6. apicloud含有微信支付。支付宝支付和苹果内购的代码

    apicloud含有微信支付.支付宝支付和苹果内购的代码 <!DOCTYPE html> <html> <head> <meta charset=" ...

  7. 自定义vue的loading插件

    在一般的vue项目中,都会用到Loading或者Alert之类的弹窗浮层,而他们是一种比较高频率出现的组件. 一般情况下,我们都会去直接import该组件,然后直接以标签的形式引用进去当前页面组件中, ...

  8. office 2016 下载链接

    [安装环境]:win7/win8/win10 [64位下载] 百度网盘链接:pan.baidu.com/s/1AkiLQtjhayGdx6mw1DQyqw  提取码:qyx9

  9. PKCS pfx cer x509

    PKCS pfx cer x509 参考 PKCS 15 个标准 PKCS The Public-Key Cryptography Standards (PKCS)是由美国RSA数据安全公司及其合作伙 ...

  10. MongoDB介绍(一)

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功 ...