首页 > 编程语言 >java 通过行为参数化传递代码,来解决不断增长的需求

java 通过行为参数化传递代码,来解决不断增长的需求

时间:2023-10-03 11:33:21浏览次数:45  
标签:java Apple Color inventory 代码 参数 result public apple

1, 通过定义不同的谓词接口来区分不同的苹果的重量,如果后续有更多的需求,只需要添加更多的谓词即可


package org.example;


import java.util.ArrayList;
import java.util.List;

enum Color {
    RED, GREEN, YELLOW
}

class Apple {
    private Integer weight;
    private Color color;

    public Apple(Integer weight, Color color) {
        this.weight = weight;
        this.color = color;
    }

    public Integer getWeight() {
        return weight;
    }

    public void setWeight(Integer weight) {
        this.weight = weight;
    }

    public Color getColor() {
        return color;
    }

    public void setColor(Color color) {
        this.color = color;
    }
}

interface ApplePredicate {
    boolean test(Apple apple);
}

class AppleGreenColorPredicate implements ApplePredicate {
    // 选择绿色苹果的谓词
    @Override
    public boolean test(Apple apple) {
        return Color.GREEN.equals(apple.getColor());
    }
}

class AppleHeavyWeightPredicate implements ApplePredicate {
    // 选择重量大于150克的谓词
    @Override
    public boolean test(Apple apple) {
        return apple.getWeight() > 150;
    }
}


public class Main {

    public static List<Apple> filterApples(List<Apple> inventory, ApplePredicate p) {
        // 通过谓词筛选苹果
        List<Apple> result = new ArrayList<>();
        for (Apple apple :
                inventory) {
            if (p.test(apple)) {
                result.add(apple);
            }
        }
        return result;
    }


    public static void main(String[] args) {
        List<Apple> inventory = new ArrayList<>();
        inventory.add(new Apple(300,Color.RED));
        inventory.add(new Apple(12,Color.RED));
        inventory.add(new Apple(350,Color.GREEN));
        inventory.add(new Apple(200,Color.YELLOW));

        // 方便的筛选绿色苹果和重苹果
        List<Apple> result = filterApples(inventory, new AppleGreenColorPredicate());
        result = filterApples(result, new AppleHeavyWeightPredicate());
        for (var apple :
                result) {
            System.out.println(apple.getColor() + ":" + apple.getWeight());
        }

    }
}

2,上述定义接口实现的方式过于啰嗦和繁杂可以使用匿名类和lamble表达式进行简化

2.1, 匿名内部类

List<Apple> result = filterApples(inventory, new ApplePredicate() {
    @Override
    public boolean test(Apple apple) {
        return Color.GREEN.equals(apple.getColor());
    }
});
result = filterApples(inventory, new ApplePredicate() {
    @Override
    public boolean test(Apple apple) {
        return apple.getWeight() > 150;
    }
});

2.2 lamble表达式

List<Apple> result = filterApples(inventory, (Apple apple)->apple.getColor().equals(Color.GREEN));
result = filterApples(result, (Apple apple)->apple.getWeight()>150);

3,更进一步的可以将针对苹果的list类型进行抽象化,用于其他的水果

interface Predicate <T>{
    boolean test(T t);
}

public static <T> List<T> filter(List<T> inventory, Predicate<T> p) {
    // 通过谓词筛选T
    List<T> result = new ArrayList<>();
    for (T e :
            inventory) {
        if (p.test(e)) {
            result.add(e);
        }
    }
    return result;
}

标签:java,Apple,Color,inventory,代码,参数,result,public,apple
From: https://www.cnblogs.com/jlxa162hhf/p/17740914.html

相关文章

  • Java的HashMap用法
    一、HashMap了解HashMap是Java中常用的集合类之一,它实现了Map接口并继承自AbstractMap类。HashMap使用哈希表来存储键值对,通过将键映射为哈希码来进行高效的插入、查找和删除操作。以下是HashMap的常见用法和特点:键值对:HashMap允许存储任意类型的键和值。可以通过键来查......
  • java断点下载文件(整合多线程)
    技术介绍:断点下载指的是在文件下载过程中,如果下载中断或失败,比如下载到一半的时候停电了、断网了、不小心退出下载界面了等等,下一次进入下载页面可以从中断或失败的位置继续下载,而无需重新开始下载整个文件。 (注意:本文通过本地文件的拷贝来模拟文件传输的断点过程) 核心想法......
  • 基于Java的高校学生综合测评管理系统的设计与实现(亮点:选课、课程评分、各类活动申请
    (高校学生综合测评管理系统)二、我的优势2.1自己的网站网站上传的项目均为博主自己收集和开发的,质量都可以得到保障,适合自己懂一点程序开发的同学使用!2.2自己的小程序(小蔡coding)<imgsrc="https://img-blog.csdnimg.cn/img_convert/3df3eff92652bb0959df5e3d738d05c9.png"......
  • java本地文件多线程拷贝
    简单介绍:本地文件多线程拷贝是指通过多个线程同时进行文件复制操作。传统的文件复制操作往往是串行进行的,当需要复制单个大文件时,复制速度往往会比较慢。而采用多线程进行文件拷贝可以提高效率。通过同时创建多个线程,每个线程负责复制不同的文件或者不同的文件片段,可以充分利用计......
  • Shell 函数详解(函数定义、函数调用、参数变量)
    Shell函数的本质是一段可以重复使用的脚本代码,这段代码被提前编写好了,放在了指定的位置,使用时直接调取即可。Shell中的函数和C++、Java、Python、C# 等其它编程语言中的函数类似,只是在语法细节有所差别。Shell函数定义的语法格式如下:functionname(){statements[re......
  • 三个Java入门项目
    Java实现简单计算器参考链接......
  • JAVA--异常
    什么是反射?可以从类里面将该类的成员方法成员变量,构造方法的信息给拿出来使用可以获取成员变量,构造方法,成员方法的所有信息.学习反射应该学习如何获取和解剖获取class对象的三种方式在源代码阶段使用Class.forName("全类名");(最常用)在加载阶段使用A.class(一......
  • Java---异常
    14.1概念在日常编码中或多或少都会现一些问题,这些问题有的是错误和有的是异常(不正常)。日常编码这种问题分为两类:1、错误Error2、异常Exception错误在jvm,硬件层面报出的问题异常是代码运行层面bug:1、编码语法错误(很好解决)2、运行时异常这种异常也好解决,根据提示去做修......
  • java对浮点数保留合适的位数
    importjava.text.DecimalFormat;publicclassMain{publicstaticvoidmain(String[]args){doublenumber=3.1415926;DecimalFormatdf=newDecimalFormat("#.0#");Stringformatted;if(nu......
  • Java面试突击题库
                 ......