一、抛出需求

  超市中挑选苹果,挑选条件多样化。

  示例:找出绿色并且重量等于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的更多相关文章

  1. Java8新特性-Lambda表达式是什么?

    目录 前言 匿名内部类 函数式接口 和 Lambda表达式语法 实现函数式接口并使用Lambda表达式: 所以Lambda表达式是什么? 实战应用 总结 前言 Java8新特性-Lambda表达式,好 ...

  2. 乐字节-Java8新特性-Lambda表达式

    上一篇文章我们了解了Java8新特性-接口默认方法,接下来我们聊一聊Java8新特性之Lambda表达式. Lambda表达式(也称为闭包),它允许我们将函数当成参数传递给某个方法,或者把代码本身当作 ...

  3. java8新特性——Lambda表达式

    上文中简单介绍了一下java8得一些新特性,与优点,也是为本次学习java8新特性制定一个学习的方向,后面几篇会根据上文中得新特性一一展开学习.本文就从java8新特性中比较重要的Lambda表达式开 ...

  4. Java8新特性 - Lambda表达式 - 基本知识

    A lambda expression is an unnamed block of code (or an unnamed function) with a list of formal param ...

  5. java8新特性-lambda表达式和stream API的简单使用

    一.为什么使用lambda Lambda 是一个 匿名函数,我们可以把 Lambda表达式理解为是 一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  6. Java8新特性: lambda 表达式介绍

    一.lambda 表达式介绍 lambda 表达式是 Java 8 的一个新特性,可以取代大部分的匿名内部类,简化了匿名委托的使用,让你让代码更加简洁,优雅. 比较官方的定义是这样的: lambda ...

  7. Java8 新特性lambda表达式(一)初始

    本篇参考Richard Warburton的 java8 Lambdas :Functional Programming for the Masses 学习lambda表达式之前,需要知道什么是函数式 ...

  8. Java8新特性——Lambda 表达式

    Lambda 表达式 ​ ​ ​ ​ ​ ​ ​ ​ Lambda 表达式的实质属于函数式编程. ​ ​ ​ ​ ​ ​ ​ ​ 语法格式为:(parameters) -> expression ...

  9. Java8新特性-Lambda表达式

    1.  什么是Lambda表达式? Lambda表达式就是可以把函数作为参数传递,或者说把代码作为数据传递给函数. 2. Lambda表达式的语法格式 基本语法格式如下: 基本语法下多个变体的说明: ...

  10. Java8新特性——lambda表达式.(案例:词频统计)

    需求:读入一个文本文件,确定所有单词的使用频率并从高到低排序,打印出所有单词及其频率的排序列表 先用传统方法解: package cn._1.wordfrequency; import java.ut ...

随机推荐

  1. [golang]Golang实现高并发的调度模型---MPG模式

    Golang实现高并发的调度模型---MPG模式 传统的并发形式:多线程共享内存,这也是Java.C#或者C++等语言中的多线程开发的常规方法,其实golang语言也支持这种传统模式,另外一种是Go语 ...

  2. EasyEarth三维可视化解决方案——智慧林业

    智慧林业 智能巡管监护 护林员信息查询 护林员管护范围查询 护林员报警.采集数据查看 样点.样线管理 其它功能模块 ●一键考勤打卡 ●面积测量 ●任务公告发布 ●实时电量监控 ●一键报警功能 ●北斗短 ...

  3. 启动服务器 SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener

    意思是spring.jar这个包在发布的时候没有被放入war.如果是maven管理的项目,可以看看这个项目的部署参数里有没有加入所有maven的包. 右键项目->Properties->D ...

  4. Servlet快速入门及运行流程

    一.Servlet快速入门 1.创建一个web工程 2.在JavaResource中src下创建一个包名称为com.myxq.servlet 3.在创建的servlet包当中创建一个class文件起名 ...

  5. 太厉害了,终于有人能把TCP/IP协议讲的明明白白了!

    从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议.实际生活当中有时也确实就是指这两种协议.然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称.具体来说 ...

  6. 通过OpenSSL来生成PEM格式的私钥、PKCS8格式的私钥、公钥|pfx格式的私钥、cer格式的公钥

    1.生成PEM格式RSA私钥 不对输出的文件内容进行加密 openssl genrsa -out private-rsa.key 对输出的文件内容进行加密(DES/AES128/AES256等) op ...

  7. 007 SpringBoot的@EnableAutoConfiguration注解

    一:原理 1. 首先Spring Boot项目中都会如下启动类: @SpringBootApplication public class Application { public static voi ...

  8. java 库 pdfbox 将 pdf 文件转换成高清图片方法

    近期需要将 pdf 文件转成高清图片,使用库是 pdfbox.fontbox.可以使用 renderImageWithDPI 方法指定转换的清晰度,当然清晰度越高,转换需要的时间越长,转换出来的图片越 ...

  9. elementUI-tree组件 懒加载

    <el-tree ref="tree" :data="menu.treeData" :props="menu.defaultProps" ...

  10. Shell流程控制语句for

    for语法格式: for 变量 in 参数列表 do 命令 done 或者 for 变量 in 参数列表 ; do 命令 done for语句流程控制图: 实例: [root@youxi1 ~]# v ...