Linq to Objects for Java
好几年不写博客了,人也慢慢变懒了。然而想写了却不知道写点啥,正好最近手头有点小项目就分享一下经历。
现在 java 的大环境下,基本都是围着 spring 转,加上一堆其他的库。有了架子就开始搞业务了,大家都忙的焦头烂额。写业务的时候经常碰到操作集合的情况,基本上就是 apache、stream-api 都用上,实在不行就各种循环,各种容器 array,list,map 纷纷上阵。但是本人是从 C# 转到 java 的,总是觉得这么搞浪费开发效率,非常不爽。这里嘲讽一下自己,有的用就不错了,还挑肥拣瘦,就是被 .net 给惯得毛病。
本着搞事情的原则,就想会不会有 第三方的 linq 库可以拿来用用。一搜发现还真有个库,用法跟 .net 的一模一样(java 的假泛型导致的,有些 api 用起来还是比较难受)。但是打开源代码看了一下,还是有点失望。虽然实现了表达式树和大多数的 linq api。但是实现方式跟我的预期不一样,可能那个库写的比较早那时候 java 还不支持在接口中写默认方法,关键是代码写的比较乱,实现思路跟 .net 的 linq 也有好多不一致的。
思想斗争了一番,最终决定自己在 java 上实现一个 linq。具体的实现参考了 .net 的源码,质量可以保证。但是 java 不支持 yiled。中间又有一段时间研究 java 的 yield 库,最后果断放弃了,一是没有编译成功,二是非官方的字节码修改不太靠谱。最终决定将 .net 中的 yiled 关键字,结合编译器生成的状态机代码,翻译成 java 版本的 状态机。最终诞生了 Linq to Objects for Java 这个库。最近征得领导同意,将代码开源,以不断优化。
最后,附上项目地址:https://github.com/timandy/linq。欢迎拍砖,欢迎 fllow。
Linq to Objects for Java的更多相关文章
- Linq to Objects for Java 发布 1.0.1 版本
现在 java 支持 linq 啦.比原生 stream api 更好用,功能更强大.现已发布 version 1.0.1 地址: https://github.com/timandy/linq. A ...
- Linq To Objects
一.什么是Linq To Objects 从根本上说,Linq To Objects表示一种新的处理集合的方法.采用旧方法,必须编写指定如何从集合检索数据的复杂的foreach循环.而采用Linq方法 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- [C#] Linq To Objects - 如何操作文件目录
Linq To Objects - 如何操作文件目录 开篇语: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述> 社会反响不错,但自己却始终觉得缺点什么!“纸上得来终觉浅,绝 ...
- [C#] Linq To Objects - 如何操作字符串
Linq To Objects - 如何操作字符串 开篇语: 上次发布的 <LINQ:进阶 - LINQ 标准查询操作概述>(90+赞) 社会反响不错,但自己却始终觉得缺点什么!“纸上得来 ...
- LINQ to Entities 和LINQ to Objects 的区别
本文资料来源:http://www.codeproject.com/Articles/246861/LINQ-to-Entities-Basic-Concepts-and-Features) LINQ ...
- Linq之Linq to Objects
目录 写在前面 系列文章 linq to objects 总结 写在前面 上篇文章介绍了linq的延迟加载特性的相关内容,从这篇文章开始将陆续介绍linq to Objects,linq to xml ...
- 查询表达式和LINQ to Objects
查询表达式实际上是由编译器“预处理”为“普通”的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的介绍 LINQ中的基础概念 降低两种数据 ...
- LINQ之LINQ to Objects(上)
LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. 1.LINQ体系结构 从上图可以看出,L ...
随机推荐
- Angular5学习笔记 - 集成Bootstrap、Jquery、Tether(三)
一.添加配置 cnpm i bootstrap jquery tether --save 添加后效果 二.配置添加样式和js的引用 打开.angular-cli.json文件,在styles和scri ...
- bash 中的行处理命令 awk
转自:http://blog.chinaunix.net/uid-23302288-id-3785105.html
- 【转】IMSI和IMEI
国际移动客户识别码(International Mobile Subscriber Identification Number) 为了在无线路径和整个GSM移动通信网上正确地识别某个移动客户,就必须给 ...
- 设置windows10 背景颜色
[Win + R ] regedit 打开注册表 HKEY_CURRENT_USER\Control Panel\Colors 1.[InfoWindow] 默认为(白色):255 255 255, ...
- Rails中文乱码问题【转】
乱码情况一:netbeas控制台输出乱码 具体表现为:在程序中定义中文字符串,然后输出.但输出为乱码 解决方法:打开netbeans安装目录,找到etc目录下的netbeans.conf文件.在net ...
- 升级 AngularJS 至 Angular
Victor Savkin 大神撰写了一系列文章详细介绍如何升级 AngularJS 应用: NgUpgrade in Depth Upgrade Shell Two Approaches to Up ...
- create-react-app脚手架中配置sass
本文介绍如何在react中配置sass 首先将你的文件名称改成scss结尾的文件 然后安装依赖 cnpm install sass-loader node-sass --save-dev 找到node ...
- SUSE 开启ssh、telnet
SSH 1. /etc/ssh/sshd_config [SSH的配置文件] 2. SuSEfirewall2 stop #关闭防火墙 如图,输入命令 vi /etc/ssh/sshd_config ...
- 推荐一款GIF录制工具
LICEcap 是一款屏幕录制工具,支持导出 GIF 动画图片格式,轻量级.使用简单,录制过程中可以随意改变录屏范围 下载 http://www.cockos.com/licecap/
- 一行代码搞定所有屏幕适配AbViewUtil
适配原理:抛弃google提供的dip理论与多套图片与布局方案,采用与UI设计师通用的px作为标准单位,原理是将UI设计师的设计图与当前查看的手机或其他设备的屏幕像素尺寸进行换算,得到缩放比例,在Ac ...