JDK8 lambda的会话指南–术语表

上次出现…我写了一篇与JDK8为我们提供的新方法有关的文章。 最令我兴奋的功能是lambda。 我必须承认,在即将成为浪子的第一年(在此期间,我使用C#开发了该产品),我喜欢LINQ和它可以做的漂亮,优雅的事情。 现在,即使擦除仍然在我们上次离开的地方,现在我们有了更好的过滤,更改,遍历集合以及语法糖旁边的方法,这也可能使您正确使用四核处理器你向朋友吹牛。 在谈论朋友时,这篇文章是与lambda和流处理相关的术语摘要,当他们问您:“ <DKD 8中与lambdas相关的那个地名>是什么? 我无意提供完整列表或lambda指南,如果我说错了什么或错过了什么,请告诉我...

功能界面:

根据[jls 8],功能接口是仅具有一个抽象方法的接口,因此表示单个功能协定(在某些情况下,此“单个”方法可以采用具有等效等效签名的多个抽象方法的形式( [jls7_8.4.2])从超级接口继承;在这种情况下,继承的方法在逻辑上表示单个方法。

@FunctionalInterface –用于指示接口应为功能接口。 如果注释放置在实际上不是的接口上,则会发生编译时错误。

例如:

interface Runnable { void run(); }

Runnable接口是一个非常合适的示例,因为当前存在的唯一方法是run方法。 功能接口的另一个Java“经典”示例是Comparator <T>接口,在下面的示例中是前面提到的接口,并且equals方法继承自Object ,该接口仍然起作用,因为compare方法是唯一的抽象方法,而equals继承自超类。

interface Comparator<T> {boolean equals(Object obj);int compare(T o1, T o2);}

–根据[牛津词典],在计算中是连续的数据或指令流,通常具有恒定或可预测的速率。
从JDK 8 开始,代表一种机制,用于通过计算管道从数据源传送元素。 流可以用作数组,集合,生成器功能,I / O通道的数据源。 获取流:

  • Collection通过stream()和/或parallelStream()方法;
  • 通过Arrays.stream(Object[])从数组
  • 从流类的静态工厂方法开始,例如Stream.of(Object[])IntStream.range(int, int)Stream.iterate(Object, UnaryOperator)
  • 可以从BufferedReader.lines();获得文件的行BufferedReader.lines();
  • 可以从Files中的方法获取文件路径流。
  • 可以从Random.ints();获得随机流Random.ints();
  • JDK中的许多其他流承载方法, including BitSet.stream()Pattern.splitAsStream(java.lang.CharSequence)JarFile.stream()

流操作对流执行的操作。 从流操作的角度来看,有两种类型的操作:中间操作和终端操作

流中间操作 –缩小流内容的操作。 中间操作本质上是惰性的–实际不更改流的内容,而是创建另一个更窄的流。 仅在调用终端操作时才开始流的遍历。

  • filter –根据提供的谓词过滤流
  • map –通过将映射函数应用于初始流中的每个元素来创建新流(每种数字类型的对应方法:int,long,double)
  • flatMap –一种操作,其作用是对流的元素进行一对多转换,然后将结果元素展平为新的流。 例如,如果订单是采购订单流,并且每个采购订单都包含一个订单项集合,则以下内容将生成一个订单项流:
orderStream.flatMap(order -> order.getLineItems().stream())
  • 与众不同–返回不同的操作流
  • 已排序–返回已排序操作流
  • peek –调试专用的方法,该方法返回由该流元素组成的流,所提供的操作在每个元素上执行

例如:

list.stream().filter(filteringFunction).peek(e -> {System.out.println("Filtered value: " + e); });.map(mappingFunction).peek(e -> {System.out.println("Mapped value: " + e); });.collect(Collectors.intoList());
  • limit –返回当前流的截断版本(不超过元素的限制数量)
  • substream –返回一个由剩余元素组成的流,该元素从起始位置开始,或者在startPosition和endPosition之间

流终端操作 –遍历流以产生结果或副作用。 执行完终端操作后,该流被视为已消耗(在已消耗的流上调用另一个操作将抛出IllegalStateException )。 终端操作本质上是急切的,除了iterator()splititerator()为那些在API中找不到所需功能的人提供了扩展机制。

  • forEach –将提供的操作应用于流的每个元素。 也存在forEachOrdered版本
  • toArray –将流的元素提取到数组中
  • 减少–减少方法
  • 收集-可变还原法
  • min –计算流的最小值
  • max –计算流的最大值
  • count –计算流中的元素
  • anyMatch –如果存在与提供的条件匹配的元素,则返回true
  • allMatch –如果所有元素都匹配,则返回true
  • noneMatch –如果所有元素都不匹配,则返回true
  • findFirst –查找与提供的条件匹配的第一个元素
  • findAny –返回流中的元素

流管道 :由一个源,随后的零个或多个中间操作和一个终端操作组成。

分离器 –用于遍历和分配源元素的分离器。 可以将其用于遍历,估计元素数量或将其拆分为多个拆分器

归约 –归约运算(或折叠)采用一系列输入元素,并通过重复应用组合运算将它们组合成单个汇总结果。 归约运算可以是计算总和,最大值,最小值,计数或收集列表中的元素。 简化操作也可以并行化,只要所使用的函数是关联的且无状态的即可。 用于减少的方法是reduce()

例如:使用和减少:

int sum = numbers.stream().reduce(0, (x,y) -> x + y);

要么

int sum = numbers.stream().reduce(0, Integer::sum);

可变归约 –是一种在处理流中的元素时将输入元素累积到可变结果容器(StringBuilder或Collection)中的操作。

例如:

String concatenated = strings.reduce("", String::concat)

谓词 –确定输入对象是否符合某些条件的功能接口

我希望这个精简的列表对您有所帮助,并且在您需要在一页上使用所有这些术语的时候将其保留在书签中。

如果您发现缺少的东西,请告诉我,以便纠正。

所以……我希望您有个不错的降临时间,并祝您生日快乐/快乐/快乐,但最重要的是,祝您圣诞节平安!

参考: 关于JDK8的lambda的会话指南– Java出现日历博客上来自JCG合作伙伴 Attila Mihaly Balazs 的术语表 。

翻译自: https://www.javacodegeeks.com/2013/12/a-conversational-guide-for-jdk8s-lambdas-a-glossary-of-terms.html

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

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

相关文章

写接口给别人调用 推送数据到我们_我们写了一个超好用的抖音矩阵数据管理工具...

我最近跑了十来个抖音号&#xff0c;遇到一些问题&#xff0c;然后通过我们NB的程序员解决了。如果你也在做抖音矩阵&#xff0c;那这些问题你肯定也会遇到&#xff0c;所以我把解决问题的方法工具化了&#xff0c;给大家用。我遇到的最大的问题&#xff0c;就是账号数据的同步…

php crypt mysql password_使用PHP 5.5的password_hash和password_verify函数

使用PHP 5.5的password_hash和password_verify函数假设我想为用户存储密码&#xff0c;这是使用PHP 5.5的password_hash()功能(或者这个版本的PHP 5.3.7&#xff1a;https&#xff1a;//github.com/ircmaxell/password_compat)的正确方法吗&#xff1f;$options array("c…

Mysql order by 导致 using filesorting

https://www.cnblogs.com/drcoding/p/4942277.html转载于:https://www.cnblogs.com/eason-d/p/9700526.html

angular 拼接html 事件无效

主要是要引用$compile方法 更多专业前端知识&#xff0c;请上 【猿2048】www.mk2048.com

更好地利用Pmd,Findbugs和CheckStyle的结果。

我们可以列举许多Java静态分析工具&#xff0c;每种工具都专注于特定领域并具有其优势&#xff0c;我们可以列举一下&#xff1a; Pmd是基于静态规则集的Java源代码分析器&#xff0c;它识别潜在的问题&#xff0c;例如&#xff1a; 可能的错误-空的try / catch / finally / s…

Java基础知识(数据类型和集合)

一、数据类型 包装类型 包装类型是对基本数据类型不足之处的补充。 基本数据类型的传递方式是值传递&#xff0c;而包装类型是引用传递&#xff0c;同时提供了很多数据类型间转换的方法。 Java1.5 以后可以自动装箱和拆箱 二、集合 List&#xff1a;有序、可重复。可以通过索引…

python 局域网 主机名_使用python获取连接到本地网络(基于主机名)的所有设备的ip...

这绝对不是重复的。在我正在做一个应用程序&#xff0c;我需要找到我的设备的IP地址。我知道他们的名字&#xff0c;通过他们的名字我需要得到他们的知识产权。Linux应该很简单&#xff0c;但我需要跨平台的态度&#xff0c;因此我使用python。在我已经知道解决方案&#xff1a…

mfc使用cef源代码实现_如何获得微信小游戏跳一跳源码以及源代码组合包括哪些...

很多小游戏都是由源代码编写而成的&#xff0c;那大家知道源代码组合包括哪些吗?手机游戏源代码怎么使用的呢?还有&#xff0c;如何获得微信小游戏跳一跳源码?下面就由奇瑰网小编带大家来了解一下相关的内容吧。   源代码组合包括哪些   源代码作为软件的特殊部分&#…

js 分页插件(jQuery)

参考&#xff1a;http://www.jb51.net/article/117191.htm 侵删 css 部分 charset "utf8"; *{box-sizing: border-box;padding: 0;margin: 0; } .page{font-size: 13px;text-align: center;margin-top: 20px; } .page .page_to{display: inline-block;max-width: 25…

机器学习过程中欠拟合和过拟合的诊断及解决方法

1.Diagnosing bias vs. variance 2.Regularization and bias/variance 3.Learning curves 4.Deciding what to try next 转载于:https://www.cnblogs.com/CoolJayson/p/9704385.html

微信 python 2020_2020年最新的Python操控微信教程

​自从微信禁止网页版登陆之后&#xff0c;itchat 库实现的功能也就都不能用了&#xff0c;那现在 Python 还能操作微信吗&#xff1f;答案是还可以。目前有一个项目 WechatPCAPI 可以对微信进行操作&#xff0c;简单来说它是直接操作 PC 版微信客户端的&#xff0c;当然它有一…

高级Java泛型:检索泛型类型参数

在JDK5中引入Java泛型之后&#xff0c; Java泛型Swift成为许多Java程序的组成部分。 但是&#xff0c;乍一看似乎很简单的Java泛型&#xff0c;程序员很快就会迷失此功能。 大多数Java程序员都知道Java编译器的类型擦除 。 一般来说&#xff0c;类型擦除意味着有关Java类的所有…

php 算法

<? //-------------------- // 基本数据结构算法 //-------------------- //二分查找&#xff08;数组里查找某个元素&#xff09; function bin_sch($array, $low, $high, $k){ if ( $low < $high){ $mid intval(($low$high)/2 ); if…

python利用opencv去除图片logo_利用python和opencv批量去掉图片黑边

import osimport cv2import numpy as npfrom scipy.stats import modeimport timeimport concurrent.futures‘‘‘multi-process to crop pictures.‘‘‘def crop(file_path_list):origin_path, save_path file_path_listimg cv2.imread(origin_path)gray cv2.cvtColor(im…

angularJS解决数据显示闪一下的问题?-解决办法

转自&#xff1a;https://www.cnblogs.com/e0yu/p/7219930.html?utm_sourceitdadao&utm_mediumreferral#undefined 使用 angular JS 的时候&#xff0c;把 angularJS 放到文件底部&#xff0c;在渲染页面的时候&#xff0c;会出现闪一下的情况&#xff1a; 解决办法一&a…

vue的钩子函数

1.computed 计算属性 计算属性将被混入到 Vue 实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 1..aPlus: {get: function () {return this.a 1},set: function (v) {this.a v - 1}}2.. aPlus(){    return this.$router.params  } 这两种方法都可以&am…

python英文字符串排序_Python根据内嵌的数字将字符串排序(sort by numbers embedded in strings)...

标签&#xff1a;import rere_digits re.compile(r‘(\d)‘)def embedded_numbers(s):pieces re_digits.split(s) # 切成数字与非数字pieces[1::2] map(int, pieces[1::2]) # 将数字部分转成整数return piecesdef sort_strings_with_embedded_numbers(ali…

定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱

本文实例为大家分享了python实现定时发送邮件到指定邮箱的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下整个链路&#xff1a;传感器采集端采集数据&#xff0c;边缘端上传数据库&#xff0c;从数据库拿到数据。产品端有个自动出报告的需求&#xff0c;并且希望自动…

使用Guava的AbstractInvocationHandler正确完成代理

不太经常&#xff0c;但有时我们被迫使用java.lang.reflect.Proxy编写自定义动态代理类 。 这种机制的确没有魔力&#xff0c;而且即使您永远不会真正使用它&#xff0c;也值得知道-因为Java代理在各种框架和库中无处不在。 这个想法很简单&#xff1a;动态创建一个实现一个或…

php异常处理机制

转自&#xff1a;https://www.cnblogs.com/water0729/p/5802476.html php异常我们常接触到的就是error错误码1&#xff0c;warning错误码2&#xff0c;notice错误码8这三类。出现error了系统是挂掉了&#xff0c;但是warning和notice是我们可以捕捉并处理的 php配置项display_e…