zoukankan      html  css  js  c++  java
  • 2020.12.19,函数式接口,函数式编程,常用函数式接口,Stream流

    文件上传优化
    目的:解决文件名相同覆盖问题

    1.文件名称进行优化
    服务器端口传入文件名称一样,最终导致服务器硬盘只保留一个文件,所以需要对文件进行优化
    //文件名称定义规则
    0."beautiful"
    1.把System.currentimients();毫秒值加入文件名
    2.Random.nextInt(1000000),随机0~100万得数加入文件名
    3.".jpg"
    //前后加字符串是为了保证1 2 操作是拼接不是相加

    2.如何保证服务器端一直处于文件接收状态
    //使用循环
    while(true){
    Socket socket=serverSocket.accept();//表示来一个客户端我就接收
    }

    3.当多个客户端同时发送消息,我们就可以优化效率问题
    方法:多线程,每个客户端单独一个线程,块就可以同时发生,不会因为等一个人另一个人不能动的情况

    总体代码演示

    注意
    最终不能关闭服务器,关闭之后就不能实现一直保持服务器打开了
    //serverSocket.close();这一步不能执行

    函数式接口
    1.概念
    在java中,有且仅有一个抽象方法,就成为函数接口
    2.适用场景:
    函数式接口就是函数式编程,在Java中函数式编程体现在想起lambda表达式

    函数式接口格式
    接口中有且只有一个抽象方法,可以有其他的默认方法,静态方法,私有方法

    @FunctionalInterface
    函数式接口的是注解,表示是函数式接口,如果不是函数式接口这个注解报错

    示例
    函数式接口代码

    函数式接口实现代码

    函数式编程
    在兼顾java面向对象的特性基础上,通过lambda编程方法引用,为开发者打开函数式编程的大门。

    lambda表达式的延迟加载:提升一点点性能
    有些场景代码运行后,结果不一定会被使用到从而造成性能的浪费,lambda表达式是延迟执行的,刚好解决这种性能浪费的场景。可以解决此问题

    如果不使用lambda表达式,不管前面是否满足后面都会执行,使用了lambda表达式,如果前面的满足后面才执行,前面不满足后面的动都不会动。
    代码演示

    使用lambda表达式作为方法的参数和返回值
    在java中,lambda表达式是作为匿名内部类的替代品,如果一个方法的参数是一个函数式接口类型,呢么可以使用lambda表达式进行替代

    如果一个方法的返回值累类型是一个函数式接口:那么我们就可以直接用一个lambda表达式:Comparator是一个函数式接口(排序)

    常用函数式接口
    JDK官方提供了很多常用的函数式接口,就是为了丰富lambda表达式的使用场景,主要是在jav.util.function包下
    Supplier(生产型接口)

    • 在java.util.function.Supplier接口,只有一个get无参方法,用于获得泛型指定类型的对象数据,是一个函数式接口
    • Supper接口称为生产性接口,指定接口泛型类型,那么接口中的get方法就会产生什么类型的数据

    代码演示

    Cosumer接口(消费型接口)

    • 在java.util.functiond.Consumer,该接口刚好和supplier想法,不是用来生产一个市局的是拿来消费一个数据的。
    • 数据类型由泛型来指定
    • 抽象方法accept方法,意思就是消防一个指定泛型的数据

    代码如下

    onsumer的默认方法:andThen--->不能传null对象,不然就会有空指针异常
    如果一个方法的参数和返回值都是Consumer类型,那么就可以实现这样的效果,消防数据的时候先做一个消费的操作,再做一个消防的操作。然后实现组合,就可以通过默认方法andThen来实现

    代码演示

    规则如果是con1连接con2那么就先执行con1再执行con2,所以至少需要传入两个Consumer接口对象,通过andThen执行消防动作。

    练习
    定义一个字符串数组存储每一个人的信息(姓名,年龄,地址)--->5个
    需要使用Consumer接口按照指定的格式进行打印输出,姓名:张三;年龄:20;地址:郑州市,要求将打印姓名的动作作为第一个Consumer接口的规则,打印年龄作为第二个,打印地址的作为第三个

    代码演示

    Stream流:生产流水线
    在JDK1.8中,由于lambda表达式这种函数式编程,JDK引入了一个全新概念,"Stream"流,用于解决已有集合类库的弊端
    给集合数据
    当我们需要数组元素操作的时候总是需要不停地循环遍历,很久烦死人。
    我只想遍历一次就能实现效果

  • 相关阅读:
    Kubernetes1.91(K8s)安装部署过程(一)--证书安装
    开源仓库Harbor搭建及配置过程
    有关centos7 图形化root用户登录
    linux服务器查看tcp链接shell
    django表格form无法保存评论排查步骤
    Redis 4.x 安装及 发布/订阅实践和数据持久化设置
    django博客项目-设置django为中文语言
    windows 环境下如何使用virtualenv python环境管理工具
    【转载】python中利用smtplib发送邮件的3中方式 普通/ssl/tls
    php安装phpize工具
  • 原文地址:https://www.cnblogs.com/tushao/p/14176652.html
Copyright © 2011-2022 走看看