阅读更多

10顶
6踩

编程语言

原创新闻 Bolts 1.0发布,Java 函数式编程库

2009-09-15 10:35 by 副主编 zly06 评论(17) 有6279人浏览
Bolts是一套Java版的函数式编程库,它提供了一系列更易使用的集合,因为Bolts作者在使用Java JDK过程中觉得它提供的集合类功能上有太多的限制。

不同于其他类似的项目,Bolts的集合接口都来自于JDK集合的扩展,对集合的操作也都来自于集合方法。

下面是Bolts提供的集合类的一些demo代码:
CollectionsF.list("1","2","4").map(IntegerF.parseF())
yields list of integers 1, 2, 4.

CollectionsF.list(0, 1, -3, 2, 0).filter(IntegerF.naturalComparator().gtF(0))
yields 1, 2

CollectionsF.list("a,b", "c", "d,e,f").flatMap(StringF.splitF(","))
produces list of letters: "a", "b", "c", "d", "e", "f"


查看Bolts项目主页:http://bitbucket.org/stepancheg/bolts/
来自: bitbucket
10
6
评论 共 17 条 请登录后发表评论
17 楼 CharlesCui 2009-09-17 09:13
啥?博尔特?
16 楼 S_uperM_arket 2009-09-16 18:33
看起来怎么怪怪的 感觉就是不爽的
15 楼 night_stalker 2009-09-16 11:35
哪个语言不伤视力? 情人眼里出西施。
14 楼 wangzaixiang 2009-09-16 11:27
clojure这个语言,对于Java社区来说,可能要接受是有一些困难。毕竟Lisp的风格就吓到很多人。(曾经有人说erlang是一个有伤视力的语言,让这些人来看lisp,估计眼睛都会花掉)。不过,clojure作为纯粹的函数式语言,对于想学习函数式语言的人来说,确实是一个不错的选择。

最让我喜欢的还是clojure的动态能力和repl能力,你可以交互式的做任何东西。而这似乎是Scala这一来编译型和强类型语言所不能完成的使命。

13 楼 whaosoft 2009-09-16 10:28
开着有点不习惯
12 楼 徐风子 2009-09-16 10:15
闭包还可以用这种方法实现,尾递归怎么办,还有内嵌函数…………
语法局限性太大了,还是用scala吧。
11 楼 wangzaixiang 2009-09-16 09:06
学习了几天clojure,凑个热闹

night_stalker 写道
语法局限妨碍思想表达。简单对比

CollectionsF.list("1","2","4").map(IntegerF.parseF())

List("1","2","4") map (_.toInt)

(map #(Integer/valueOf %) ["1", "2", "4"]) 


CollectionsF.list(0, 1, -3, 2, 0).filter(IntegerF.naturalComparator().gtF(0))

List(0,1,-3,2,0) filter (_ > 0)

 (filter #(> % 0) [0 1 -3 2])



CollectionsF.list("a,b", "c", "d,e,f").flatMap(StringF.splitF(","))

List("a,b","c","d,e,f") flatMap (_.split(','))

(clojure.contrib.seq-utils/flatten (map #(seq (.split % ",") ) ["a,b" "c" "d,e,f"])  )

10 楼 rox 2009-09-15 23:25
难怪看起来眼熟,和Scala这么像。
9 楼 andyyehoo 2009-09-15 18:46
不是一般的别扭
8 楼 shaopei3344 2009-09-15 17:12
这个太挺啰嗦了,而且不好理解
7 楼 vii779 2009-09-15 14:54
java又不支持闭包,如果闭包里面逻辑复杂点,怎么能做到简化呢
6 楼 vii779 2009-09-15 14:51
List(0,1,-3,2,0).filter{it=> it>0 && it<2}

这个用java语法怎么简化?
5 楼 ray_linn 2009-09-15 14:48
。。。。搓啊。。。。这东西
4 楼 starfeng 2009-09-15 14:20
night_stalker 写道
语法局限妨碍思想表达。简单对比

CollectionsF.list("1","2","4").map(IntegerF.parseF())

List("1","2","4") map (_.toInt)


CollectionsF.list(0, 1, -3, 2, 0).filter(IntegerF.naturalComparator().gtF(0))

List(0,1,-3,2,0) filter (_ > 0)


CollectionsF.list("a,b", "c", "d,e,f").flatMap(StringF.splitF(","))

List("a,b","c","d,e,f") flatMap (_.split(','))


也差不太多啊。。。Java无非多了个类名限定而已。若这点小节也看不顺眼,用个static import声明一下, 和scala没什么样差别吧。
比方:
   CollectionsF.list("1","2","4").map(IntegerF.parseF())  

====>
   list("1","2","4").map(parseF())
3 楼 vii779 2009-09-15 12:44
这类功能用java语法来实现本来就不合适,
前段时间看过用java语法实现的闭包,查询语句的DSL,可读性太差了,还不如不用。
2 楼 night_stalker 2009-09-15 12:08
语法局限妨碍思想表达。简单对比

CollectionsF.list("1","2","4").map(IntegerF.parseF())

List("1","2","4") map (_.toInt)


CollectionsF.list(0, 1, -3, 2, 0).filter(IntegerF.naturalComparator().gtF(0))

List(0,1,-3,2,0) filter (_ > 0)


CollectionsF.list("a,b", "c", "d,e,f").flatMap(StringF.splitF(","))

List("a,b","c","d,e,f") flatMap (_.split(','))
1 楼 vii779 2009-09-15 10:48
就这罗嗦的语法,还是用scala算了

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • PB多线程实现

    包含PB9 PB12.5和PB.NET多线程的实现方法

  • PB多线程的实现与线程池设计

    文章目录PB多线程性能测试源代码 PB多线程 PB多线程主要通过下面两个系统函数实现: SharedObjectRegister SharedObjectGet 通过这两个函数创建线程对象后,便可以像一般对象一样调用其中的方法,post调用线程对象的方法时代码会以独立的线程执行。 使用多线程的好处是: 1.对于IO密集型操作,以独立线程执行可以避免程序卡顿或失去响应。 2.对于计算密集型操作,可以...

  • PB多线程的缺陷与实现机制浅析

    昨天提到了PB多线程的问题,我其实一直都想写一个PB通用线程库,但一直没有找到好的方法去实现,主要的原因有几点。PB的多线程功能很少有人去深入分析过其实现机制,也没有在这方面的文档可以参考,以前我写过一篇PB的线程使用的心得,也没有完全回答出所有的疑问,今天我想解决一下这个问题。为什么PB中使用线程功能时可能会出现程序假死的情况(死锁)?要回答这个最主要的问题还是回到刚才提到的线程库的设想中来解决

  • PB的多线程

    最近还在学习PB,有点郁闷,还是不太喜欢PB啊 上周五看了一下PB,感觉还简单。本来已经动手,但因为周五下午有事出去,所以拖到今天。。 PB的多线程用到的就几个函数                                    SharedObjectRegister()                                    SharedObjectGe

  • 关于PowerBuilder多线程的一些心得

    最近在看.Net多线程的时候突然想到PowerBuiler是否支持多线程开发呢?于是Google了下,原来真的可以,不过比较遗憾的是这关于PB多线程方面的资料无论是英文的还是中文的都十分稀缺,完全没有详细的资料可查,连官网都一样,PB自带的帮助文档就更不用说的,简陋啊!!于是自己摸着石头过河,其中也遇到不少莫名其妙的问题,但多数是IDE本身语义检测的缺陷,谁让这不是VS呢?... -----

  • Sharedobject与pb多线程

    PB没有提供完整的多线程机制,只是提供了一种通过Sharedobject进行线程间通信的方式, 实际是以一个新线程启动另一个虚拟机, 并在其中实例化一个对象来运行一段程序(函数), 并在完成后执行回调。 这个具体概念目前还不是特别清晰, 从SharedObjectRegister函数的帮助中看, 原文写的是&quot;opens a separate runtime session&quot;, 直译是打开一...

  • PB9多线程实例

    多线程是指一个程序内部同时执行的多个流程,与单线程相比,可以更好地利用系统资源,比如CPU,若一个线程因I/O操作受阻,另一个线程仍可利用CPU来执行。 本代码实现了PB下同时运行两个计数器线程,基于SharedObject技术。

  • 用 SharedObjectRegister 的对象不能访问全局结构

    最近在做pb的多线程,今天又发现,子线程除了不能直接访问主线程的可视对象外,也不能访问结构。 顺便提一下: ///------------------初始化进程SharedObjectRegister("sys_syn_filesoption","子进程")SharedObjectGet("子进程",invo_file) 然后用post 最后记得 SharedO...

  • 【​PB中实现多线程技术​】

    PB开发

  • 多线程访问全局变量(两个线程,一读一写)

    多线程访问全局变量

  • PB 回调函数,多线程

    pb实现回调函数实现多线程应用 pb90的代码 在此基础上,可写成日志组件,大大提高系统性能。 已组件化,根据demo的用法,直接可以引用到业务程序中

  • PB8.0应用程序编译发布技术研究

      摘要:本文主要讨论基于Windows平台的PowerBuilder 8.0应用程序编译发布关键问题和解决方法,包括执行文件的建立、资源文件的创建、安装程序的建立及添加数据源和SQL anywhere 数据库移动处理等问题。关键字:软件开发、PowerBuilder 8.0、应用程序发布、Setup程序制作 。       引言  PowerBuilder+ODBC+SQL anywhere是目

Global site tag (gtag.js) - Google Analytics