文档章节

2.1Java8中 行为参数化的概念

R
 Refresh-LV
发布于 2017/07/07 14:39
字数 397
阅读 10
收藏 0

        行为参数化--->将方法的行为参数化,Java8中能够以方法为另一方法的入参。   

        行为参数化就是可以帮助你处理频繁变更的需求的一种软件开发模式。一言以蔽之,它意味 着拿出一个代码块,把它准备好却不去执行它。这个代码块以后可以被你程序的其他部分调用, 这意味着你可以推迟这块代码的执行。例如,你可以将代码块作为参数传递给另一个方法,稍后 再去执行它。这样,这个方法的行为就基于那块代码被参数化了。例如,如果你要处理一个集合, 可能会写一个方法:

 可以对列表中的每个元素做“某件事”

 可以在列表处理完后做“另一件事”

 遇到错误时可以做“另外一件事”

public class FilteringApples {
    public static void main(String[] args) {
        List<Apple> apples = Arrays.asList(new Apple("red", 80), 
                                           new Apple("green", 188), 
                                           new Apple("green", 200), 
                                           new Apple("red", 199));
    List<Apple> heavyApples = filterApples(apples, new AppleHeavyPredicate());
    List<Apple> greenApples = filterApples(apples, new AppleGreenPredicate());    
    List<Apple> redWeightApples = filterApples(apples, new AppleRedAndHeavyPredicate());
    for (Apple apple : redWeightApples) {
            System.out.println(apple.toString());
        }
    }
    
    public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) {

        //接口指向实现类
        List<Apple> apples = new ArrayList<>();    
        for (Apple apple : inventory) {
            if (p.test(apple)) {
                apples.add(apple);
            }
        }
        return apples;
    }
}

--------------------------ApplePredicate -----------------------------------------------

public interface ApplePredicate {
    boolean test(Apple apple);
}
 

-------------------------AppleRedAndHeavyPredicate -----------------------------------

public class AppleRedAndHeavyPredicate implements ApplePredicate{
    public boolean test (Apple apple) {
        return "red".equals(apple.getColor()) && apple.getWeight() > 150;
    }
}
-----------------------------使用匿名类创建对象------------------------------------

List<Apple> heavyApplelist = filterApples(apples, new ApplePredicate(){
        public boolean test(Apple apple) {
            return apple.getWeight() == 80;
        }
    });

有什么有误区的地方,请各位道友指正!

© 著作权归作者所有

R
粉丝 1
博文 23
码字总数 7973
作品 0
仙桃
私信 提问
java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念

本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 ...

noteless
2018/08/19
0
0
面向对象接口和类的区别

在OOD(面向对象设计)中,经常会用到抽象类或接口,【注:在C++中,没有接口的概念,只有抽象类;而在Java中两者都存在】。而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想...

sshpp
2017/07/20
0
0
UML类图中的六大关系:泛化、实现、依赖、关联、聚合、组合关系

UML定义的关系主要有:泛化、实现、依赖、关联、聚合、组合,这六种关系紧密程度依次加强,分别看一下 1、泛化 概念:泛化是一种一般与特殊、一般与具体之间关系的描述,具体描述建立在一般描...

HappyBKs
2014/07/27
366
0
深刻理解抽象类和接口

深刻理解抽象类和接口 前言   在我初学Java时,和别人说道:“我要设计一个接口,然后……”,那人问我:“什么是接口?”,我说:“接口就是接口呗,顾名思义!”。其实那是我很难说清楚什...

Japson
2017/07/17
0
0
基于spring-boot的应用程序的单元+集成测试方案

概述 本文主要介绍单元测试、集成测试相关的概念、技术实现以及最佳实践。 本文的demo是基于Java语言,Spring Boot构建的web应用。测试框架使用Junit,模拟框架使用mockito。 之前曾经总结过...

heyikan
2018/11/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring使用ThreadPoolTaskExecutor自定义线程池及实现异步调用

多线程一直是工作或面试过程中的高频知识点,今天给大家分享一下使用 ThreadPoolTaskExecutor 来自定义线程池和实现异步调用多线程。 一、ThreadPoolTaskExecutor 本文采用 Executors 的工厂...

CREATE_17
今天
5
0
CSS盒子模型

CSS盒子模型 组成: content --> padding --> border --> margin 像现实生活中的快递: 物品 --> 填充物 --> 包装盒 --> 盒子与盒子之间的间距 content :width、height组成的 内容区域 padd......

studywin
今天
7
0
修复Win10下开始菜单、设置等系统软件无法打开的问题

因为各种各样的原因导致系统文件丢失、损坏、被修改,而造成win10的开始菜单、设置等系统软件无法打开的情况,可以尝试如下方法解决 此方法只在部分情况下有效,但值得一试 用Windows键+R打开...

locbytes
昨天
8
0
jquery 添加和删除节点

本文转载于:专业的前端网站➺jquery 添加和删除节点 // 增加一个三和一节点function addPanel() { // var newPanel = $('.my-panel').clone(true) var newPanel = $(".triple-panel-con......

前端老手
昨天
8
0
一、Django基础

一、web框架分类和wsgiref模块使用介绍 web框架的本质 socket服务端 与 浏览器的通信 socket服务端功能划分: 负责与浏览器收发消息(socket通信) --> wsgiref/uWsgi/gunicorn... 根据用户访问...

ZeroBit
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部