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. C++ 自增、自减运算符的重载和性能分析

    01 ++.--运算符重载函数的格式 自增运算符和自减运算符是有前置和后置之分的,如: a++ // 后置自增运算符 ++a // 前置自增运算符 b-- // 后置自减运算符 --b // 前置自减 ...

  2. Spring/Spring boot正确集成Quartz及解决@Autowired失效问题

    周五检查以前Spring boot集成Quartz项目的时候,发现配置错误,因此通过阅读源码的方式,探索Spring正确集成Quartz的方式. 问题发现 检查去年的项目代码,发现关于QuartzJo ...

  3. securecrt如何保存操作日志

  4. mysql使用命令

    1.创建用户 create user 'name'@'host' identified by 'psssword'; 2.授权 grant select, updata,insert (all) on ...

  5. Windows 跟 Linux 文件共享:Samba 设置

    用 Samba  服务器 https://my.oschina.net/u/3783115/blog/1919892?from=timeline https://blog.51cto.com/1372 ...

  6. 01-Django 简介

    一.MVC框架(模型-视图-控制器缩写,软件的构建模式) 一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需 ...

  7. MD文件图片base64自动编码

    看工具链接请直接将文章拉到最后.. 概述 不知道你在使用markdown写文章的时候有没有遇到过这样的烦恼, 文件写完了, 想将写完的文章粘贴到博客的时候, 你满心欢喜的复制粘贴, 但是发现图片根本复 ...

  8. C++学习七 C++实现add(1)(2)(3)

    一.代码实现: class Yoba { public: Yoba(int n) : _n(n) {} Yoba operator() (int n) { return Yoba(_n + n); } ...

  9. C++学习四 冒泡排序法的一些改进

    冒泡排序法需要两次扫描,所以从时间复杂度来说,是O(n2). 如果用图形表示,是这样的: 但是我们可以加以改进. 首先是,如果在排序中间,整个向量已经达到了有序状态,可以直接跳出来. 这样它的复杂度由 ...

  10. redis数据存入乱码问题解决方法

    第一步:配置RedisTemplate @Configuration public class RedisConfigurtion { @Autowired private RedisTemplate ...