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中算法命令
latex中算法命令_比较Java 8中的命令式和功能性算法相关推荐
- 移除Java对象中的属性_在java对象中添加和删除属性
我怎样才能在 java中实现这一点.我有一个具有属性的对象. public class Object { private final Credentials Credentials; private ...
- java中person作用_以下Java程序中Person(){};是什么意思,有什么作用?
匿名用户 1级 2013-08-20 回答 Person()方法是用来创建实例的构造方法,例如你要创建一个Person类的实例就需要new Person(),这里的Person()就是Person类的 ...
- 下列java语句中 不正确_下列JAVA语句中,不正确的一项是()
[单选题]下列代表"横向跳格"格式转义字符的是( ) . (3.0分) [单选题]运算符+* % =中,优先级最低的是( ). (3.0分) [填空题]要使用标准的I/O库函数,必 ...
- java 方法中定义类_在Java方法中使用类定义
小编典典 这称为本地课程. 2很简单:是的,将生成一个类文件. 1和3是同一个问题.你可以使用本地类,而无需使用一种方法来实例化一个本地类,也无需在任何地方知道实现细节. 典型的用途是创建某些接口的一 ...
- java中解释命令_闲来无事可来了解下Java中Javadoc命令的用法
[javadoc命令的用法] 1.java源文件里,注释以/**开始 并以*/结束,里面可以包含普通文件,HTML标记和javaDoc标记.这些将构成javaDoc文档. 2.javadoc命令只能处 ...
- java内存漏洞_处理Java程序中的内存漏洞
Java 程序中也有内存漏洞?当然有.与流行的观念相反,在 Java 编程中,内存治理仍然是需要考虑的问题.在本文中,您将了解到什么会导致内存漏洞以及何时应该关注这些漏洞.您还有机会实践一下在您自己的 ...
- java面试会问到的问题吗_[转载]java面试中经常会被问到的一些算法的问题
Java面试中经常会被问到的一些算法的问题,而大部分算法的理论及思想,我们曾经都能倒背如流,并且也能用开发语言来实现过, 可是很多由于可能在项目开发中应用的比较少,久而久之就很容易被忘记了,在此我分享 ...
- java的算法库_利用Java写开源库 覆盖70多种推荐算法
描述 在经过一年多的开发工作之后,LibRec 3.0 版本终于发布了.LibRec 是一个基于 Java 的开源算法工具库,覆盖了 70 余个各类型推荐算法,可以有效解决评分预测和物品推荐两大关键的 ...
- java 应用分模块_在Java 11中创建一个简单的模块化应用教程
模块化编程使人们能够将代码组织成独立的,有凝聚力的模块,这些模块可以组合在一起以实现所需的功能. 本文摘自Nick Samoylov和Mohamed Sanaulla撰写的一本名为Java 11 Co ...
最新文章
- 最终篇:简洁易懂,初学者挑战学习Python编程30天 (五)
- DFT的准备(一)(对离散序列的傅里叶分析大总结)
- java频繁的new对象 优化方案
- 机器人鸣人是哪一集_火影里的五个机器人,第一个比鸣人还厉害,机器丁次你都没见过...
- 16、Event事件(定时任务)是什么?
- Android多开和虚拟化--Docker概念的详细介绍
- pvr波形是什么意思_PVR的完整形式是什么?
- 从java到C++入门
- Linux操作系统内核启动参数详细解析
- Linux进程全解5——父子进程对文件的操作
- Python 操作redis 常用方法
- EMC创建出《星际旅行》全息甲板,并利用其模拟数据中心
- 软件工程概论个人总结
- ​苹果或于明年9月发布电动汽车;10家头部平台紧急下架互联网存款产品;Go 1.16首个Beta版本发布|极客头条​...
- 保卫Google!刻不容缓
- CodeLite+TDM-GCC调试C++程序,断点无效问题
- 专场介绍 | 第12届中国R会议(北京)生物信息专场
- Python 随笔之Redis
- javplayer 使用教程_童装裁剪之连衣裙打版教程 有图纸
- 小丸工具箱\FFmpeg踩坑记录
热门文章
- ATcoder-[AGC048B]Bracket Score【结论,贪心】
- P3247-[HNOI2016]最小公倍数【分块,并查集】
- P2900-[USACO08MAR]Land AcquisitionG【斜率优化】
- 【模板】分散层叠算法(P6466)
- Sentinel(二十四)之Sentinel Dashboard中修改规则同步到ZooKeeper
- 聚集索引、辅助索引、覆盖索引、联合索引
- Spring BeanFactory 容器
- HikariCP-史上最快速的连接池
- vue前期知识点笔记
- 你,下周可否“报上有名”?