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)
谓词 –确定输入对象是否符合某些条件的功能接口
我希望这个精简的列表对您有所帮助,并且在您需要在一页上使用所有这些术语的时候将其保留在书签中。
如果您发现缺少的东西,请告诉我,以便纠正。
所以……我希望您有个不错的降临时间,并祝您生日快乐/快乐/快乐,但最重要的是,祝您圣诞节平安!
翻译自: https://www.javacodegeeks.com/2013/12/a-conversational-guide-for-jdk8s-lambdas-a-glossary-of-terms.html
JDK8 lambda的会话指南–术语表相关推荐
- jdk8lambda_JDK8 lambda的会话指南–术语表
jdk8lambda 上次出现-我写了一篇与JDK8为我们提供的新方法有关的文章. 最令我兴奋的功能是lambda. 我必须承认,在即将成为浪子的第一年(在此期间,我使用C#进行了开发),我喜欢LIN ...
- Google发布机器学习术语表 (中英对照)
来源 | TensorFlow Google 工程教育团队已经发布了多语种的 Google 机器学习术语表,该术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义.语言版本包括西班 ...
- 干货丨谷歌最新机器学习术语表
作者:思颖 来源:雷锋网 日前,谷歌发布机器学习术语表,以下术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义. A A/B 测试 (A/B testing) 一种统计方 ...
- Google 机器学习术语表
原文:Google机器学习术语表 机器学习术语表 本术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义. A A/B 测试 (A/B testing) 一种统计方法,用于将两种或 ...
- 汇总: 机器学习术语表
来源:https://developers.google.cn/machine-learning/glossary/?hl=zh-CN (中文) https://developers.google.c ...
- 【官网文档】机器学习术语表
https://developers.google.cn/machine-learning/glossary/ 本术语表中列出了一般的机器学习术语和 TensorFlow 专用术语的定义. A A/B ...
- git clone 一部分_Git/GitHub 中文术语表 | Linux 中国
我们根据 GitHub 等文档,收集整理了部分常用的 Git 和 GitHub 中的术语的中文定名及其解释.作者:硬核老王 Git 和 GitHub 已经成为了开发者的基础工具,尤其是参与开源软件开发 ...
- 【转】SharePoint 术语表
术语表 术语 定义 访问控制条目 安全对象的自由访问控制列表 (DACL) 或对象的系统访问控制列表 (SACL) 中的一项.在 DACL 中,该项向用户或组授予权限或者拒绝向用户或组授予权限.在 ...
- TensorFlow官方文档术语表
2019独角兽企业重金招聘Python工程师标准>>> 术语表 艾伯特(http://www.aibbt.com/)国内第一家人工智能门户 广播操作(Broadcasting ope ...
最新文章
- pandas删除dataframe中行内容全是0的数据行(remove rows with all zeros in dataframe)
- 构建高性能J2EE应用的五种核心策略
- 【论文解读】图像超分最新记录!南洋理工提出图神经网络嵌入新思路,复原效果惊艳...
- 二十三、前端必学Node.js入门
- Jenkins实现Android自动化打包
- ci Call to undefined function site_url()
- linux编码 form表单,Linux以form表单形式上传文件讲解
- 如何在React Native中使用Redux Saga监视网络更改
- Configuration Manager 纯模式所需的 PKI 证书的分步部署示例
- TypeError: Unexpected keyword argument passed to optimizer: learning_rate解决方法
- 【Spring.net点滴】
- react 类暴露_react如何将组件内部的方法暴露给外部
- python实现目录中制定内容查找
- Dijkstra算法图解
- CREO学习笔记【常见表面处理工艺】
- 色彩设计原理(里面有配色方案,也有配色网站)
- 躺平国历险记:两个超平面之间距离的计算
- 摄影基础知识: 曝光补偿完全指南
- oracle lob类型和mysql text_OracleLob类型存储浅析
- 运动健身人群画像洞察报告.pdf
热门文章
- 量子计算机对人类长寿,科学家称“极端长寿”在未来几十年可能会达到新的里程碑...
- apache ranger_Apache Ranger插件的美丽简洁
- netflix 模式创新_创新设计模式:单例模式
- 设计模式装饰者模式_装饰者模式如何拯救了我的一天
- input发送a.jax_JAX-RS 2.0:服务器端处理管道
- hazelcast_Hazelcast的MapLoader陷阱
- Spring Boot微服务,Docker和Kubernetes研讨会–第3部分
- javafx canvas_JavaFX技巧1:可调整大小的Canvas
- JDK 13:什么是AggressiveOpts?
- github上java项目_GitHub上10,000个最受欢迎的Java项目-以下是他们使用的顶级库