Lambda(一)lambda表达式初体验
2019-11-03 16:04:52来源:博客园 阅读 ()
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);
原文链接:https://www.cnblogs.com/itgcjava/p/lambda_r1.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 学习笔记之Lambda表达式 2020-06-05
- JAVA8 Lambda表达式 2020-05-31
- Lambda表达式用法大比较: Scala和Java 8 2020-05-26
- java 8 stream、lambda表达式对list操作分组、过滤、求和、 2020-05-14
- JavaWeb 之 EL与JSTL 2020-05-06
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash