Java8新特性——Lambda表达式-1
一、抛出需求
超市中挑选苹果,挑选条件多样化。
示例:找出绿色并且重量等于150的苹果,找出红色并且重量小于120苹果。
1、苹果类
public class Apple {
private String color;
private int weight;
public Apple(String color, int weight) {
this.color = color;
this.weight = weight;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getWeight() {
return weight;
}
public void setWeight(int weight) {
this.weight = weight;
}
@Override
public String toString() {
return "color=" + this.color + ",weight=" + this.weight;
}
}
二、实现方案
采用策略模式,实现数据筛选。
1、查找苹果类
public class FindApple {
public static List<Apple> findApple(List<Apple> apples, AppleFilter appleFilter) {
List<Apple> list = new ArrayList<>();
for (Apple apple : apples) {
if (appleFilter.filter(apple)) {
list.add(apple);
}
}
return list;
}
}
2、实现方法
方法一、继承扩展接口实现多个filter
- 绿色并且重量等于150的苹果filter
public class GreenAnd150WeightFilter implements AppleFilter{
@Override
public boolean filter(Apple apple) {
return ("green".equals(apple.getColor()) && 150 == apple.getWeight());
}
}
- 红色并且重量小于120苹果 filter
public class RedLess120WeightFilter implements AppleFilter {
@Override
public boolean filter(Apple apple) {
return ("red".equals(apple.getColor()) && 120 > apple.getWeight());
}
}
- 查询实现与结果
public static void main(String[] args) {
List<Apple> appleList = Arrays.asList(new Apple("green", 150), new Apple("red",100));
List<Apple> greenApples = findApple(appleList, new GreenAnd150WeightFilter());
System.out.println(greenApples);
List<Apple> redApples = findApple(appleList, new RedLess120WeightFilter());
System.out.println(redApples);
}

方法二、匿名内部类
public static void main(String[] args) {
List<Apple> appleList = Arrays.asList(new Apple("green", 150), new Apple("red",100));
//查找绿色并且重量等于150的苹果
List<Apple> greenApples = findApple(appleList, new AppleFilter() {
@Override
public boolean filter(Apple apple) {
return ("green".equals(apple.getColor()) && 150 == apple.getWeight());
}
});
System.out.println(greenApples);
//查找红色并且重量小于120苹果
List<Apple> redApples = findApple(appleList, new AppleFilter() {
@Override
public boolean filter(Apple apple) {
return ("red".equals(apple.getColor()) && 120 > apple.getWeight());
}
});
System.out.println(redApples);
}

3、小结
策略模式的两种实现方法,继承实现多个filter类、匿名内部类,可以方便实现复杂条件的数据筛选,但是在代码上显得有些累赘。
Java8新特性——Lambda表达式-1的更多相关文章
- Java8新特性-Lambda表达式是什么?
目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...
- 乐字节-Java8新特性-Lambda表达式
上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...
- java8新特性——Lambda表达式
上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...
- Java8新特性 - Lambda表达式 - 基本知识
A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...
- java8新特性-lambda表达式和stream API的简单使用
一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...
- Java8新特性: lambda 表达式介绍
一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...
- Java8 新特性lambda表达式(一)初始
本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...
- Java8新特性——Lambda 表达式
Lambda 表达式 Lambda 表达式的实质属于函数式编程. 语法格式为:(parameters) -> expression ...
- Java8新特性-Lambda表达式
1. 什么是Lambda表达式? Lambda表达式就是可以把函数作为参数传递,或者说把代码作为数据传递给函数. 2. Lambda表达式的语法格式 基本语法格式如下: 基本语法下多个变体的说明: ...
- Java8新特性——lambda表达式.(案例:词频统计)
需求:读入一个文本文件,确定所有单词的使用频率并从高到低排序,打印出所有单词及其频率的排序列表 先用传统方法解: package cn._1.wordfrequency; import java.ut ...
随机推荐
- updateprimarykey 和updateprimaryKeySelective
updateprimarykey 会对左右的字段都进行更新,updateprimaryKeySelective 只会对不为null的字段进行更新..所以在填表的web项目需要注意这个两个方法的选择,因 ...
- SpringCloud Feign通过FallbackFactory显示异常信息
SpringCloud Feign可以进行服务消费,而且内置了Hystrix,能够进行熔断. Feign可以通过fallback指定熔断回调的类.代码示例及讲解可见: https://www.cnbl ...
- #C++初学记录(树和二叉树)
二叉树的编号 例题 6-6 小球下落问题 有一棵二叉树,最大深度为D,且所有叶子深度都相同.所有节点从上到下,从左到右编号为1,2,3,4,....,2^D-1.在节点1处放置小球,他会往下落.每个节 ...
- Hadoop平台上HDFS和MapReduce的功能
1.用自己的话阐明Hadoop平台上HDFS和MapReduce的功能.工作原理和工作过程. HDFS (1)第一次启动 namenode 格式化后,创建 fsimage 和 edits 文件.如果不 ...
- 第06组 Alpha冲刺(4/6)
队名:拾光组 组长博客链接 作业博客链接 团队项目情况 燃尽图(组内共享) 组长:宋奕 过去两天完成了哪些任务 主要完成了用户联系模块的接口设计 完善后端的信息处理 GitHub签入记录 接下来的计划 ...
- eos的资源和工具列表
1.eos买rex的时候同时获得投票收益: https://b1.run/eosproxy eos的投票衰减规则: Block.one 希望确保用户经常更新他们的投票设定,而不是设置完就不管了.为了促 ...
- python-使用阿里云镜像加速
1. 在当前用户根目录下建立.pip文件夹 mkdir ~/.pip2.在.pip文件夹下创建文件pip.conf,并追加内容 [global]trusted-host=mirrors.aliyun. ...
- arcpy实例教程-地图范围导出到要素类
arcpy实例教程-地图范围导出到要素类 商务合作,科技咨询,版权转让:向日葵,135-4855_4328,xiexiaokui#qq.com 功能:将当前地图范围导出到内存要素类 描述:将当前地图的 ...
- 微信小程序开发——使用第三方插件生成二维码
需求场景: 小程序中指定页面需要根据列表数据生成多张二维码. 实现方案: 鉴于需要生成多张二维码,可以将生成二维码的功能封装到组件中,直接在页面列表循环中调用就好了.也可以给组件添加slot,在页面调 ...
- sql server exec 参数的传递
来源:https://www.cnblogs.com/guohu/p/11142991.html 1 :普通SQL语句可以用exec执行 Select * from tableName exec('s ...