范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

一天一个编程小知识之Java中的函数式编程

  函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数。
  为什么java中可以使用函数式编程
  Java本身是面向对象的程序设计语言,要想在Java中使用函数式编程的特性,首先需要支持函数式编程。 编程语言中需要有结构来表示函数是支持函数式编程的一大特征 。在Java中使用接口来表示函数,Python中有map和reduce等。 在java中函数的定义
  函数式编程可以提高我们的开发效率(什么是函数式编程),那么在Java中怎么定义和使用这样一个特性呢?
  上面说明了Java中是通过接口定义 函数  的,所以如果接口中添加了 @FunctionalInterface  注解,则这个接口是可以用做函数式编程的。
  当然并不是所有接口都可以添加这个注解的, @FunctionalInterface  注解有几个限制条件,分别是: 接口有且仅有一个抽象方法 允许定义静态方法 允许定义默认方法
  直到Java8,Java才提供了内置标准API来表示函数,也就是 java.util.function  包。 Function  表示接受一个参数的函数,输入类型为 T  ,输出类型为 R  。
  下面以 java.util.function  包下的 Function  接口的源码为例: @FunctionalInterface public interface Function {     // 有且仅有一个抽象方法     R apply(T t);     // 默认方法1     default  Function compose(Function<? super V, ? extends T> before) {         Objects.requireNonNull(before);         return (V v) -> apply(before.apply(v));     }     // 默认方法2     default  Function andThen(Function<? super R, ? extends V> after) {         Objects.requireNonNull(after);         return (T t) -> after.apply(apply(t));     }     // 静态方法     static  Function identity() {         return t -> t;     } }
  除了 Function ,Java 标准库还提供了几种特殊类型的函数: Consumer:接受一个输入,没有输出。抽象方法为 void accept(T t)。 Supplier:没有输入,一个输出。抽象方法为 T get()。 Predicate:接受一个输入,输出为 boolean 类型。抽象方法为 boolean test(T t)。 UnaryOperator:接受一个输入,输出的类型与输入相同,相当于 Function。 BinaryOperator:接受两个类型相同的输入,输出的类型与输入相同,相当于 BiFunction。 BiPredicate:接受两个输入,输出为 boolean 类型。抽象方法为 boolean test(T t, U u)。 另外如果一个接口满足上面的`@FunctionalInterface`注解的要求可以不需要显示的添加`@FunctionalInterface`注解。 不过通常还是主动添加`@FunctionalInterface`注解,添加注解后如果在当前接口再添加抽象方法时,编辑器会提示不允许添加。如何自定义函数接口
  根据 @FunctionalInterface  注解的要求可以实现自定义函数接口。 // 自定义函数接口 @FunctionalInterface public interface CustomAddFunc {   R add(T t); }在Java中函数的使用
  因为函数式编程的特点是允许把函数本身作为参数传入另一个函数,所以方法的参数含有上面Java标准库或者自定义的函数类型参数时,就是定义了一个函数式编程的方法了。
  带函数参数的方法定义
  下面以 java.util.stream  包下的 Stream  接口部分源码为例: // Stream接口部分源码 public interface Stream extends BaseStream> {     Stream filter(Predicate<? super T> predicate);      Stream map(Function<? super T, ? extends R> mapper); }
  filter  和 map  方法都有一个Java标准库中特殊类型的函数参数。 `Function`接受一个参数的函数,输入类型为 T,输出类型为 R。 `Predicate`接受一个输入,输出为 boolean 类型。
  带函数参数的方法使用 // 通过匿名内部类的方式实现函数接口 int sum = Arrays.stream(new int[]{1, 2, 3}).map(new IntUnaryOperator() {     @Override     public int applyAsInt(int operand) {         return operand + 1;     } }).sum(); System.out.println(sum); // 输出 9
  优雅的使用带函数参数的方法
  Java8提供了lambda表达式,是创建匿名内部类的语法糖(syntax sugar)。所以上面的使用方式可以优化成更短的代码 int l = Arrays.stream(new int[]{1, 2, 3}).map(v -> v + 1).sum(); System.out.println(l);
  结合lambda表达式使用函数式编程可以很大程度地减少不必要的代码,达到提高开发效率的目的,而且在表达上也更清晰。

汽车迎来智能网联时代,建设法律制度以保障数据安全势在必行如今新能源汽车的发展已经渐入佳境,逐渐找到了自己的发展节奏。此时的电动化智能化网联化共享化成为了汽车的新标签。大部分消费者在选购汽车时越来越注重智能驾驶体验,殊不知,智能体验感有了除了自燃,新能源车潜藏着的这两个安全隐患,司机要有心理准备随着新能源汽车发展越来越快,很多朋友换车的时候会考虑新能源汽车,但是通过喵哥对新能源汽车的试驾体验,我发现新能源汽车,除了自动驾驶是一个很大的担忧之外,针对日常驾驶还潜藏着两个很大实锤打脸!特斯拉加州事故死者抖音被扒5月5日,一辆特斯拉Model3在加州高速公路撞向一辆翻倒的卡车,造成特斯拉驾驶员死亡,卡车司机和和另一名停车司机受伤。事故发生后,美联社援引警方的话说,初步调查确定,在事故发生前电动化新成员奔驰ConceptEQT正式发布续航或为265公里大家好!今天选车网为您带来奔驰的最新消息,请点击关注选车网,第一时间了解最新的汽车资讯。近日,选车网从相关渠道获悉,奔驰发布了ConceptEQT的信息。新款车型圆润优雅,续航方面华为人的工资真的不是吹出来的!贴吧惊现华为员工的吐槽媒体整天熙熙攘攘宣传的华为员工的高薪,原来是真的!下面是在某贴吧看到的华为员工的吐槽,15B,41万年终奖靠谱不?华为人的薪酬收入主要包括,工资奖金分红支加班费,按照华为内部员工吐百度网盘又添新成员,5月18日网盘TV版上线,网友需要开会员吗文电脑手机那些事儿原创文章,请勿转载,非诚勿扰网盘行业经过了几年的大洗牌之后,百度网盘以顽强的生命力存活了下来,如今百度网盘已经成为整个行业中的一枝独秀。为了能够在网盘行业中分一杯华为中国生态大会2021重磅不断发展能力型伙伴要做智能时代的架桥工与修路人来源读特为期2天以因聚而生有能有为为主题的华为中国生态大会2021在深圳圆满落幕。会上,华为与伙伴就如何跨越数字鸿沟,如何共赢数字时代发表了一系列精彩演讲,以及输出了众多值得思考的OPPO再立功!强大专利渠道升级,助力中国5G手机用户全球领先众所周知,在通信技术领域,我国经历了2G落后3G跟随4G并跑几个阶段后,终于在5G时代成为了技术上的领跑者。2019年6月6日,工信部向中国电信中国移动中国联通中国广电发放5G商用框塑车会成为下一个火爆市场的细分产品品类吗?可以毫不夸张地说,中国新能源绿色交通工具的发展史就是各个产品品类不断细分市场的发展史。从电动自行车到电动摩托车,从货运三轮车到休闲三轮车,从低速电动汽车到微电轿,从新能源商用车到新曝比亚迪全新纯电SUV计划项目代号为UX系列今年4月,比亚迪销量总为45,234辆,去年同期31,809辆,其中新能源汽车销售25662辆,同比增长97。514月总销量达149,379万辆,同比增长60。48。在热销产品中,阿里巴巴投入加码饿了么本地生活服务迎历史性发展机遇中新经纬客户端5月19日电(余妍辰)5月13日,在阿里巴巴2021财年第四季度及全年财报电话会上,阿里巴巴集团(下称阿里或阿里巴巴)董事会主席兼首席执行官张勇表示,未来阿里将继续全
为什么现在新的手机发布都不提5G了?感谢您的阅读。为什么现在新的手机发布都不提5G了?可能是您没有特别注意,现在各个手机厂家在发布新手机的时候,对5G还是特别重点介绍的,当然和您说的前几年相比,确实没有那么的过度宣传这些手机我们以前买不起,现在价格不到2000元不知道大伙有没有注意到,最近很多手机系列的定位都在上探。用大家熟悉的四个字来描述,就是冲击高端。像一加数字小米数字和荣耀Magic等机型,随着配置加码,价格也水涨船高。其他机型虽然Kindle退出国内市场?Kindle退出国内市场?亚马逊官方回应第三方还能买今日,有报道指出,京东Kindle自营旗舰店大面积缺货,导致大部分网友猜测号称泡面神器的亚马逊Kindle电子阅读器或将退出中国大战一触即发OPPOFindX5Pro骁龙8自研6nm芯片搅局节后市场按照以往惯例,最新高通骁龙芯片发布之后,各大手机厂商大显身手集体抢首发或者抢首批搭载,为消费者提供尝鲜乐趣。今年也不例外,在小米12系列手机号称驯龙大师发布后,OPPO的骁龙8新旗随着电动重卡汽车的发展,会否进一步提升新能源汽车市场的渗透率接上篇文章做下补充中药股的逆势上涨跟CXO下跌有关,因为CXO被机构减仓后部分资金流入中药股。中环股份硅片降价,机构圈已经把光伏的上游硅料硅片内卷化利好下游2021年新能源的渗透率中美科学技术的竞争(五)美国对市场的理解充斥零和思维,是深深的深入到了骨子里的,很多中国人是很难理解的。上世纪七八十年代日本高速发展,到九十年代可以买下整个美国,美国屡次对日本打击,但是日本半导体产业仍然华为Mate50Pro渲染图再次激活鲶鱼效应,也是iPhone13最大威胁虽然华为Mate50Pro迟迟没有发布,但是已经有媒体爆料,华为Mate50Pro会延期但是不会迟到,而且由于芯片紧张的原因,华为的两大旗舰型号,P系列和Mate系列将会变成年度发ViVoNEX5G用了2年多了不知道要不要换?文小伊评科技先说我的结论不建议现阶段更换。你和我一样,都是VIVONEX的用户,我买的是初代版也就是NEX的旗舰版(2018年6月份发布),到现在已经快三年半了,目前和iPhoneLinux中的PCI驱动总结lPci驱动注册Pciregisterdriver(structpcidriverdrv)Staticstructpcidriverpcidriver。nameDRVNAME,。i很多人用0元月租的移动手机卡,不使用不收费请问是怎么办理的呢?现在没有这种卡了,要买的话只能找卡商。而且现在实名也挺麻烦的,外地用还有局停风险。建议办理电信5元保号套餐吧,一个月也就5块而已。这都是很久以前的套餐,早就没有了。大概十几年前的套为什么总有人挑国产车的毛病?不是挑毛病,而是车本身毛病就多几个原因1。崇洋媚外,觉得国外月亮特圆的,我身边就有,买20万出头的进口车,对国产甚至合资各种鄙视。2。买了合资,然后内心对国产也接受,就是面子过不去