latex中算法命令_比较Java 8中的命令式和功能性算法

latex中算法命令

Mario Fusco受欢迎的推文令人印象深刻,显示了类似算法的命令性和功能性方法之间的主要区别实际上是:

势在必行–功能分离pic.twitter.com/G2cC6iBkDJ

— Mario Fusco(@mariofusco) 2015年3月1日

两种算法都做同样的事情,它们可能同样快且合理。 但是,其中一种算法比另一种算法容易编写和读取。 不同之处在于,在命令式编程中,不同的算法要求遍布整个代码块,而在函数式编程中,每个要求都有自己的少量代码行。 比较:

  • 绿色:错误处理
  • 蓝色:停止条件
  • 红色:IO操作
  • 黄色:“业务逻辑”

在jOOQ博客的其他示例中,函数式编程并不总是能胜过命令式编程:

  • 如何使用Java 8函数式编程生成字母序列
  • 如何使用Java 8流快速替换列表中的元素

但是这是用户Aurora_Titanium的 Stack Overflow的示例 ,其中的区别与Mario Fusco的示例一样明显:

计算数组中的重复值

想法是计算在一组值中重复的所有那些值的总和。 例如,以下数组:

int[] list = new int[]{1,2,3,4,5,6,7,8,8,8,9,10};

…结果应为:

Duplicate: 8. Sum of all duplicate values: 24

势在必行

用户Volkan Ozkan的回答之一采用命令式方法并按以下方式计算总和:

int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10 
};int sum = 0;
for (int j = 0; j < array.length; j++)
{for (int k = j + 1; k < array.length; k++) {if (k != j && array[k] == array[j]){sum = sum + array[k];System.out.println("Duplicate found: " + array[k]+ " " + "Sum of the duplicate value is " + sum);}}
}

该方法仅适用于已排序的数组,其中重复项紧接着出现。 但是,在这种情况下, 如果性能对于此算法确实很重要 , 那么它可能是性能方面的最佳解决方案。

功能方法

如果您可以接受稍微降低的性能(将int装箱,将它们收集到地图中),也可能是这样,则可以用以下功能性Java-8样式逻辑替换上面难以阅读的代码,更清楚地传达其作用:

int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10 
};IntStream.of(array).boxed().collect(groupingBy(i -> i)).entrySet().stream().filter(e -> e.getValue().size() > 1).forEach(e -> {System.out.println("Duplicates found for : " + e.getKey()+ " their sum being : " + e.getValue().stream().collect(summingInt(i -> i)));});

或者,并附有说明:

int[] array = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 8, 8, 9, 10 
};// Create a Stream<Integer> from your data
IntStream.of(array).boxed()// Group values into a Map<Integer, List<Integer>>.collect(groupingBy(i -> i))// Filter out those map values that have only 
// 1 element in their group.entrySet().stream().filter(e -> e.getValue().size() > 1)// Print the sum for the remaining groups.forEach(e -> {System.out.println("Duplicates found for : " + e.getKey()+ " their sum being : " + e.getValue().stream().collect(summingInt(i -> i)));});

(请注意,函数方法是为每个重复值计算总和,而不是像命令法一样计算总和。从最初的问题来看,这个要求不是很清楚)

正如我们在博客的上一篇文章中所指出的那样,通过Java 8 Stream API之类的API进行函数式编程的能力在于,我们正在接近SQL风格的声明式编程的表达能力。 我们不再关心记住单个数组索引以及如何计算它们并将中间结果存储到某些缓冲区中。 现在,我们可以专注于真正有趣的逻辑,例如:“什么是重复的?” 或“我对什么感兴趣?”

阅读有关SQL与Java 8 Streams相比的更多信息:Java 8 Streams中的常见SQL子句及其等效项

翻译自: https://www.javacodegeeks.com/2015/09/comparing-imperative-and-functional-algorithms-in-java-8.html

latex中算法命令

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

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

相关文章

四大语言加强统治地位,Rust威胁C/C++

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删TIOBE 公布了 2022 年 10 月的编程语言排行榜。截至今日&#xff0c;Python、Java、C 和 C 语言已经在 TIOBE 榜单的前 4 位盘踞了相当长的一段时…

sql计算留存_SQL无所不能:DBA宝妈宝爸系列分享

原文链接&#xff1a;https://www.modb.pro/db/22315 目前程序从功能上其实已经完全满足客户(当然我这里的客户都是指媳妇儿)需求&#xff0c;具体可参考&#xff1a;使用SQL计算宝宝每次吃奶的时间间隔 - Part1&#xff1a;分析函数的使用使用SQL计算宝宝每次吃奶的时间间隔 -…

java8流分组 性能_Java性能教程– Java 8流有多快?

java8流分组 性能在此JAX Magazine的预览预览中&#xff0c;JAX伦敦发言人Angelika Langer为使用Java流的任何人回答了最重要的问题&#xff1a;它们真的更快吗&#xff1f; Java 8是JDK收集框架的主要补充&#xff0c;即流​​API。 与集合相似&#xff0c;流表示元素序列。 …

对 int 变量赋值的操作是原子的吗?为什么?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删这个是在面试的时候遇到的问题&#xff0c;当时没有答出来。回到家以后查了查&#xff0c;整理记录下来。原问题&#xff1a;什么指令集支持原子…

C语言知识总结:if-else判断语句和switch-case选择语句

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删1、if-else判断语句一个基本的if语句由一个关键字if开头&#xff0c;跟上在括号&#xff08;&#xff09;里边的是表示逻辑条件的表达式&#xf…

hibernate性能_改善Hibernate应用程序性能的7种方法

hibernate性能Hibernate是将Java Web应用程序与SQL数据库集成的好工具&#xff0c;但是当应用程序的响应时间开始显着增加时&#xff0c;我们应该怎么做&#xff1f; 当我们怀疑应用程序是否会随着客户群的增长而扩展时&#xff0c;我们该怎么办&#xff1f; 在花大价钱托管或…

python 坐标轴 单位刻度_Python学习笔记(matplotlib篇)--坐标轴刻度

python学习笔记--坐标轴刻度所用的库及环境:ide:pycharmpython环境&#xff1a;python3.7matplotlib: matplotlib 1.11numpy&#xff1a; numpy1.15.datetime &#xff1a;datetime坐标轴刻度概念当需要把x&#xff0c;y坐标轴刻度调整的更密集些或者更宽松点学习如何调整x&…

为什么永远不会有语言取代C/C++?

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删数以百计的 C/C 替代品将会出现&#xff0c;但 C/C 将永远与我们同在&#xff01;每个 CPU 都带有一种称为 ISA&#xff08;指令集架构&#xff…

mwc校准油门_编写下载服务器。 第五部分:油门下载速度

mwc校准油门在僵尸网络时代&#xff0c;您可以租用几百美元来运行自己的分布式拒绝服务攻击&#xff0c;拥有紧急开关来有选择地关闭昂贵的功能或严重降低性能是一个巨大的胜利。 在缓解问题的同时&#xff0c;您的应用程序仍可运行。 当然&#xff0c;这种安全措施在高峰或工作…

sql 非主键每年自增_或许你不知道的 10 条 SQL 技巧

上文我们简述了 SQL 的一些进阶技巧&#xff0c;一些朋友觉得不过瘾&#xff0c;我们继续来下篇&#xff0c;再送你 10 个技巧一、 使用延迟查询优化 limit [offset], [rows]经常出现类似以下的 SQL 语句:SELECT * FROM film LIMIT 100000, 10offset 特别大!这是我司出现很多慢…

C语言最全入门笔记

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好&am…

yolo v4 python_YOLOv4: Darknet 如何于 Ubuntu 编译,及使用 Python 接口

本文将介绍 YOLOv4 官方 Darknet 实现&#xff0c;如何于 Ubuntu 18.04 编译&#xff0c;及使用 Python 接口。主要内容有&#xff1a;准备基础环境&#xff1a; Nvidia Driver, CUDA, cuDNN, CMake, Python编译应用环境&#xff1a; OpenCV, Darknet用预训练模型进行推断&…

junit测试spring_使用Spring JUnit规则进行参数化集成测试

junit测试springSpring 4.2附带了全新的JUnit规则&#xff1a; SpringClassRule和SpringMethodRule 。 使用JUnit规则的主要优点是让开发人员摆脱SpringJUnit4ClassRunner并在Spring集成测试中利用不同的JUnit运行器。 我认为Spring JUnit Rules的最大机会是易于创建参数化的集…

不属于python的数据类型_下列________不是Python的数据类型。

【判断题】已知 x, y 3, 5,那么执行x, y y, x 之后,x的值为15。【多选题】Python 中对变量描述正确的选项是( )【单选题】字符串是一个连续的字符序列,用________方式打印出可以换行的字符串。【多选题】以下选项中,不符合 Python 语言变量命名规则的有( )【多选题】Python的…

无处不在_Java无处不在:使用DukeScript在任何地方运行一次编写

无处不在在相当长一段时间内&#xff0c;Java都未能兑现“一次编写&#xff0c;随处运行”的承诺。 DukeScript希望通过在跨平台应用程序中实现视图和逻辑的清晰分离来改变这种状况。 在本文中&#xff0c;一个简单的场景用于介绍DukeScript的基础。 多年以来&#xff0c;Java…

C语言为何不会过时

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删评价任何一门编程语言&#xff0c;都是招人骂的。永远是这样。就像是春寒料峭的季节&#xff0c; 街上穿棉袄和穿单衣的擦肩而过&#xff0c;双方…

下列选项中不属于python循环语句的是哪一项_下列选项中,不属于字典操作的方法是哪一项?_学小易找答案...

【简答题】字符串有哪几种表现形式?【简答题】简述Python程序的执行过程。【单选题】Python 语句x‘char’;y2,print(xy)输出的结果是哪一项?()【编程题】输入三角形的边长和高,计算并输出三角形的面积。【简答题】手机插上充电器却没有显示充电,可以用万用表检测吗?请上网搜…

mysql 死锁监视器_并发基础知识:死锁和对象监视器

mysql 死锁监视器本文是我们名为Java Concurrency Essentials的学院课程的一部分。 在本课程中&#xff0c;您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识&#xff0c;并学习诸如原子性&#xff0c;同步和线程安全性的概念。 在这里查看 &#xff01; 目录 …

python ks值计算_利用Python计算KS的实例详解

在金融领域中&#xff0c;我们的y值和预测得到的违约概率刚好是两个分布未知的两个分布。好的信用风控模型一般从准确性、稳定性和可解释性来评估模型。sOf免费资源网一般来说。好人样本的分布同坏人样本的分布应该是有很大不同的&#xff0c;KS正好是有效性指标中的区分能力指…

教你如何用一句话激怒IT人

点击蓝字关注我们因公众号更改推送规则&#xff0c;请点“在看”并加“星标”第一时间获取精彩技术分享来源于网络&#xff0c;侵删在IT行业摸爬滚打这么久&#xff0c;你是否听过下面这些话&#xff1a;“这个很简单&#xff0c;我也是做程序出身的。”“预算砍掉一半&#xf…