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

这篇具有很好参考价值的文章主要介绍了java 通过行为参数化传递代码,来解决不断增长的需求。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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;
}

文章来源地址https://www.toymoban.com/news/detail-711913.html

到了这里,关于java 通过行为参数化传递代码,来解决不断增长的需求的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .net通过Action进行Options参数的传递,你知道是怎么实现的吗?

    在.NET Core中,使用 Action 和 Options 参数方式配置服务并将配置信息对象注册到 IServiceCollection 的好处在于,它提供了更高级别的可配置性和可扩展性。这种模式允许将配置信息与服务的实现分离,使配置更加模块化和可管理。通过将配置信息对象注册到 IServiceCollection ,可以轻

    2024年02月05日
    浏览(36)
  • 【Rust】Rust学习 第七章使用包、Crate和模块管理不断增长的项目

    目前为止,我们编写的程序都在一个文件的一个模块中。伴随着项目的增长,你可以通过将代码分解为多个模块和多个文件来组织代码。一个包可以包含多个二进制 crate 项和一个可选的 crate 库。伴随着包的增长,你可以将包中的部分代码提取出来,做成独立的 crate,这些

    2024年02月13日
    浏览(32)
  • 智能手机收入和出货量双双下滑,造车成本不断增长,小米集团仍面临风险

    来源:猛兽财经 作者:猛兽财经 华尔街分析师对小米集团第二季度的业绩预测 在8月29日小米集团(01810)公布其2023年第二季度财报之前,华尔街分析师曾预测该公司第二季度的业绩将超出2023年第一季度的业绩。 根据SP Capital IQ的数据,华尔街分析师预计小米集团的同比营收

    2024年02月09日
    浏览(39)
  • 通过Chrome打开IE浏览器并跳转到指定页面并传递参数

    通过Chrome打开IE浏览器并跳转到指定页面并传递参数 方式一:通过浏览器打开ie浏览器(可以换做其他应用),跳转到指定页面(方式一只支持单个参数) 1、新建alert.reg 替换最后一行,实现打开ie浏览器后跳转到指定页面(只支持传递单个参数) @=\\\"cmd /c set m=%1 call set m=%%m:

    2024年02月12日
    浏览(51)
  • 前端开发攻略---根据音频节奏实时绘制不断变化的波形图。深入剖析如何通过代码实现音频数据的可视化。

    逐行解析 JavaScript 代码块: 这几行代码首先获取了  audio  和  canvas  元素的引用,并使用  getContext(\\\'2d\\\')  方法获取了 Canvas 2D 上下文对象,以便后续在画布上进行绘图操作。 initCvs  函数用于初始化画布的尺寸。它将画布的宽度设置为窗口宽度的倍数,高度设置为窗口高度

    2024年04月15日
    浏览(52)
  • Java参数传递方式详解

    Java中参数传递的方式是什么样的呢?是值传递还是引用传递呢? 答案是值传递。 为什么呢? 先来了解一些基础。。。。。 Java中参数传递方式是值传递,且只有值传递,没有引用传递。 JavaGuide Java值传递详解

    2024年02月07日
    浏览(49)
  • java 的参数传递

    首先,我们从一个例子来引出这个问题: 请问,1,2,3,4 处分别输出的应该是什么? 答案是: 看到这里,同学对 1,2,4 的结果肯定是不会有疑问,可能会有一部分同学会对 3 的输出有些疑问,change方法不是对序列进行了倒排,为啥3 处mockList 的序列没变,如果有这个疑问的同学

    2024年02月02日
    浏览(29)
  • 图文详解Java参数传递类型

      大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作

    2024年02月17日
    浏览(32)
  • 需要熟记的知识 七大前后端参数传递类型结合代码讲解

    查询参数(Query Parameters):将参数添加到URL的末尾,使用 ? 和 进行分隔。例如: https://example.com/search?q=keywordpage=2 。 路径参数(Path Parameters):将参数添加到URL的路径中,使用 / 进行分隔。例如: https://example.com/users/{id} 。 请求体参数(Request Body Parameters):将参数放置在请

    2024年03月22日
    浏览(31)
  • 深入浅出Java中参数传递的原理

    今天,想和大家聊聊关于java中的参数传递的原理,参数的传递有两种,值传递和引用传递。 值传递 :是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递 :是指在调用函数时将实际参数的地址传递到

    2024年02月01日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包