Java基础(9)——从匿名内部类 到 函数式编程

news2024/12/25 0:50:05

引出

从匿名内部类到函数式编程的进化


什么是匿名内部类

在这里插入图片描述
没有类名----匿名内部类

在这里插入图片描述

List的匿名内部类

@FunctionalInterface 注解在这里插入图片描述
在这里插入图片描述

Collections.sort(list, new Comparator<Emp>() {
    @Override
    public int compare(Emp o1, Emp o2) {
        return (int) (o1.getAge()-o2.getAge());
    }
 });

o1和o2是啥:

在这里插入图片描述

Returns:
a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.

进一步的简化:

Collections.sort(list,(o1, o2)->{
    return (int) (o1.getAge()-o2.getAge());
});

函数式编程–lamda表达式

从完整的实现类 到 匿名内部类 到函数式编程

完成的实现类:

public class EatImpl implements IEat {
    @Override
    public void eat() {
        System.out.println("吃快餐");
    }
}

匿名内部类

IEat e = new IEat() {
    @Override
    public void eat() {
        System.out.println("吃面条...");
    }
};
e.eat();

lamda表达式:
在这里插入图片描述

List的函数式编程

@FunctionalInterface

出现在接口,此接口可以使用Lamda表达式。
在这里插入图片描述
List.stream()

创建一个lsit

List<Car> list = new ArrayList<>();
list.add(new Car(1, "BMW", "黑色", 350000.00, 1789.0));
list.add(new Car(2, "QQ", "橙色", 50000.00, 589.0));
list.add(new Car(3, "Benz", "白色", 450000.00, 1889.0));
list.add(new Car(4, "BYD", "绿色", 1080000.00, 2989.0));
list.add(new Car(5, "Audi", "红色", 880000.00, 1489.0));

需求:查询价格低于500000.00的车

1.普通方法:循环

for(Car c :list){
if(c.getPrice()<500000.00){
    System.out.println(c);
}
}

2.用lamda改写
要素:流对象,过滤条件,收集结果

list = list.stream() //流对象,函数编程
        .filter(car->car.getPrice()<500000.00) //过滤条件
        .collect(Collectors.toList()); //收集结果

多个条件的例子:

list.stream()
        .filter(car->car.getBrand().equals("BMW") && car.getStore()<10)
                .collect(Collectors.toList());

排序

list =  list.stream()
        .sorted((o1, o2) -> o1.getId()-o2.getId())
        .collect(Collectors.toList());

limit:限制数量

需求:找出价格最低5种车。

list= list.stream()
.sorted((o1, o2) -> (int) (o1.getPrice() - o2.getPrice()))
.limit(5)
.collect(Collectors.toList());

最大/小

需求找出库存最多的?

Car c = list.stream()
        .max((o1, o2) -> o1.getStore()-o2.getStore())
                .get()  ;
System.out.println(c);

计算价格和、平均价格

  • 计算price之和
  • 计算price*store之和
System.out.println(list.stream()
       .mapToDouble(car -> car.getPrice())
        .sum());
System.out.println(list.stream()
      .mapToDouble(car -> car.getPrice() *car.getStore())
       .sum());
  • 计算price的平均价格
  • 计算总量的平均价格
System.out.println(list.stream()
        .mapToDouble(car -> car.getPrice() *car.getStore())
        .average().getAsDouble());

去重,映射

统计出系统有哪些品牌的车?

List<String> brands = list.stream()
        .map(Car::getBrand)  //映射
        .distinct()   //去重
        .collect(Collectors.toList());
System.out.println(brands);

更多集合的lamda案例

Java基础(2)——列表 & 集合List,函数式编程Lamda表达式

总结

1.匿名内部类是啥;
2.函数编程是啥;
3.从匿名内部类到函数式编程;
4.list的函数式编程,案例;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/595323.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

问题解决:npm修改路径后获取vue信息出错,npm info vue 出错。

问题&#xff1a; 在cmd中修改了npm缓存文件及全局模块文件路径后&#xff0c;通过获取vue信息出错。 C:\Users\SueMagic>npm info vue npm ERR! code EPERM npm ERR! syscall mkdir npm ERR! path b:\nodejs\node_cache\_cacache npm ERR! errno -4048 npm ERR! Error: E…

基于django的物流管理系统

摘要 随着全球经济的蓬勃发展&#xff0c;WTO的成立也给全球的商业活动带来了新的挑战&#xff0c;因此&#xff0c;企业需要充分发挥自身的优势&#xff0c;运用最新的科学技术&#xff0c;在互联网、信息科学的指导下&#xff0c;完善现有的管理体系&#xff0c;实现全面的创…

chatgpt赋能python:Python为什么出现多个语句?

Python为什么出现多个语句&#xff1f; 在Python中&#xff0c;同一行代码可以包含多个语句&#xff0c;这是Python与其他编程语言不同之处之一。那么&#xff0c;为什么Python出现了多个语句呢&#xff1f; 1. 简洁性 Python是一种高级编程语言&#xff0c;可以通过更少的代…

NoSql数据库及使用Python连接MongoDB

NoSQL 数据库 NoSQL 数据库是非关系数据库&#xff0c;不使用结构化查询语言 (SQL) 进行数据操作。相反&#xff0c;他们使用其他数据模型进行访问和数据存储。SQL 数据库通常用于处理结构化数据&#xff0c;但它们可能不是处理非结构化或半结构化数据的最佳选择。 NoSQL 数据…

环境感知算法——1.简介与GPU驱动、CUDA和cudnn配置

1. 环境感知算法概述 在自动驾驶领域&#xff0c;环境感知算法主要负责处理周围环境中障碍物和道路的信息&#xff0c;为车辆的决策与执行提供车辆与环境的数据。包括检测移动和静止的障碍物、确定车辆在环境中所处的位置&#xff0c;涉及的传感器有摄像头、激光雷达和毫米波雷…

软件工程的问题

我长期以来一直是这个应用程序的用户&#xff0c;它一直快速、响应迅速且易于使用。 然而&#xff0c;在上周的一次更新之后&#xff0c;启动时间从不到一秒钟大幅增加到超过 15 秒。唯一明显的变化是添加了一个新的启动界面和更新了用户界面。 我经常发现自己在质疑为什么工程…

qt+mysl的制作软件的整体思路

环境配置 conda env list 创建环境conda create -n qt python=3.8 激活环境conda activate qt

软考A计划-电子商务设计师-计算机系统基础知识

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 &#x1f449;关于作者 专注于Android/Unity和各种游戏开发技巧&#xff0c;以及各种资源分享&am…

年内落地BEV,大算力芯片准备好了吗?

讲述&#xff5c;余轶南 编辑 | Amy 编者注&#xff1a; 本文是HiEV出品的系列直播「硬核拆解BEV」第二期&#xff0c;地平线副总裁兼软件平台产品线总裁余轶南博士分享的内容梳理。 第三期商汤绝影量产行车智能驾驶研发负责人蒋沁宏分享的《BEV三大关键&#xff1a;数据、迁移…

TSNE 参数超级详细设置 from sklearn.manifold import TSNE

文章目录 一、TSNE是什么&#xff1f;二、使用步骤1.引入库 from sklearn.manifold import TSNE2.参数详细说明 一、TSNE是什么&#xff1f; TSNE&#xff08;t-Distributed Stochastic Neighbor Embedding&#xff09;是一种非线性降维技术&#xff0c;主要用于高维数据的可视…

什么是lamp架构

LAMP架构介绍 LAMP动态网站架构 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。 1、LAMP分别代表什么&#xff1f; L代表服务器操作系统使用LinuxA代表网站服务使用的是Apache软件基金会中的httpd软件M代表网站后台使用的数据库是MySQL数据库…

代码审计笔记之未授权审计(缺失功能级别访问控制)

主题 1、未授权漏洞以及危害介绍 2、未授权漏洞的审计思路与方法简介 大多数网络应用程序在用户使用功能之前&#xff0c;应用程序需要验证该用户是否有功能级的访问权限。如果请求未经应用程序的验证。攻击者讲通过伪造请求参数的手段&#xff0c;获取应用的业务响应。 危害…

更轻更快更耐用,重量79g,支持4KHz回报率的雷柏VT9上手

喜欢用键鼠玩游戏的朋友&#xff0c;都会选择专业游戏鼠标和键盘&#xff0c;特别是游戏鼠标&#xff0c;往往会有着更高的精度&#xff0c;以及更丰富的自定义空间&#xff0c;在游戏中可以实现更加精准的点击。最近我看到雷柏出了一款支持4K回报率的VT9鼠标套装&#xff0c;这…

查看Oracle中指定用户下包含的包、函数、存储过程及其对应内容语句——查看当前数据库的连接内容

一、需求分析 在项目运维的时候&#xff0c;公司出于数据安全的考虑&#xff0c;对数据库的权限进行了控制&#xff0c;限制运维人员只能够通过堡垒机查看Oracle数据库内容&#xff0c;并且堡垒机只是设定了一个只读的账号查看数据库&#xff1b;这就导致了运维时在查看数据库的…

【量化交易笔记】7.基于随机森林预测股票价格

前言 机器学习在量化交易主要有两方面的应用&#xff0c;第一就是用时间序列的日频数据来预测未来的股价&#xff0c;第二 用截面数据来预测收益&#xff0c;现在量化基因的因子都基于这个模型。 接下来&#xff0c;我分别来说明&#xff0c;机器学习分成预测结果分成分类和回…

MyBatis——MyBatis配置信息

1.MyBatis的日志配置 log4j1和log4j2的使用 在项目中添加依赖 log4j2 <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.12.1</version> </dependency>log4j1 <…

基恩士IV3工业相机的使用

注意&#xff1a;此教程仅为IV3相机分类模型教程&#xff0c;IV3还具有工件缺陷检测模型&#xff0c;即将工件分为NG/OK,为二分类 IV3相机注册分类程序 一、传感器设定 拍摄条件&#xff1a;调节亮度与焦点&#xff0c;一般选择自动调节&#xff0c;调节完成后可手动微调。触发…

Hudi(四)集成Flink(2)

6、读取方式 6.1、流读&#xff08;Streaming Query&#xff09; 当前表默认是快照读取&#xff0c;即读取最新的全量快照数据并一次性返回。通过参数 read.streaming.enabled 参数开启流读模式&#xff0c;通过 read.start-commit 参数指定起始消费位置&#xff0c;支持指定 …

基于双分支残差结构的低光照图像增强研究与应用实现

1.摘要 在低光条件下拍摄的照片会因曝光不足而产生一系列的视觉问题&#xff0c;如亮度低、信息丢失、噪声和颜色失真等。为了解决上述问题&#xff0c;提出一个结合注意力的双分支残差低光照图像增强网络。首先&#xff0c;采用改进InceptionV2提取浅层特征&#xff1b;其次&a…

AndroidStudio插件 - Json转Class、实体类(JSON To Kotlin Class)

Kotlin用挺长时间了&#xff0c;最近网络请求时因为接收、解析实体类的问题&#xff0c;后台直接给到了json文件&#xff0c;客户端可直接将json转为对应的model&#xff0c;故此我们需要用到一些插件来提升工作效率 为了提升工作效率&#xff0c;一键转换json为吾所需实体类是…