Java 8 Friday:让我们弃用那些旧版库

在Data Geekery ,我们喜欢Java。 而且,由于我们真的很喜欢jOOQ的流畅的API和查询DSL ,我们对Java 8将为我们的生态系统带来什么感到非常兴奋。

Java 8星期五

每个星期五,我们都会向您展示一些不错的教程风格的Java 8新功能,这些功能利用了lambda表达式,扩展方法和其他好东西。 您可以在GitHub上找到源代码 。

在过去的两个星期五,我们一直在复活节休息,但现在我们又回来了另一篇有趣的文章:

让我们弃用那些旧版库

d8938bef47ea2f62ed0543dd9e35a483 除了Lambda和扩展方法外,JDK还通过许多新的库代码得到了增强,例如Streams API等。 这意味着我们可以批判性地检查堆栈,并且–令Deprecator医生感到高兴–丢弃了我们不再需要的所有垃圾。

这里有几个,仅举几例:

LINQ风格的库

有很多库试图模拟LINQ(即LINQ-to-Collections部分)。 Oracle认证Streams Developer认证无处不在。

不要误会我的意思。 这与LINQ或Streams更好无关。 它们几乎相同。 但是,既然我们现在在JDK中具有Streams,为什么还要担心LINQ? 此外,用于集合查询的SQLesque语法还是有误导作用。 兰伯达

这是通过奥秘和讨厌的技巧(例如ThreadLocal在Java中模拟闭包的有趣尝试。 考虑以下代码片段( 从此处获取 ):

// This lets you "close over" the
// System.out.println method
Closure println = closure(); { of(System.out).println(var(String.class));
}// in order to use it like so:
println.apply("one");
println.each("one", "two", "three");

好主意,尽管closure()之后的分号; 在那个不是真正的闭包主体的伪闭包实现块之前……所有这些似乎都很古怪!

现在,我们将编写:

Consumer<String> println = System.out::println;println.accept("one");
Stream.of("one", "two", "three").forEach(println);

这里没有魔术,只有简单的Java 8。

让我们最后一次听到Mario Fusco和Lambdaj的故事 。

Linq4j

显然,这仍在积极开发中……为什么? 请注意,该路线图中还具有LINQ-to-SQL实现,包括:

解析器支持。 修改Java解析器(例如OpenJDK),或编写预处理器。 生成包含表达式树的Java代码。

是的,我们也想为jOOQ提供这样的解析器。 这将使我们能够将SQL真正嵌入到Java中,类似于SQLJ ,但是类型安全。 但是,如果我们拥有Streams API,为什么不立即实现类似Julian Hyde的Linq4j之类的东西,因为他仍在继续工作。 但是我们认为他在错误的角落投资。

集合体

这是一个有趣的名称库,它可以执行以下操作:

from(animals).where("name", eq("Lion")).and("age", eq(2)).all();from(animals).where("name", eq("Dog")).or("age", eq(5)).all();

但是,为什么这样写,当您可以写时:

animals.stream().filter(a -> a.name.equals("Lion")&& a.age == 2).collect(toList());animals.stream().filter(a -> a.name.equals("Dog")|| a.age == 5).collect(toList());

让我们为Wagner Andrade听听。 然后到垃圾箱

一半的番石榴

番石榴几乎是所有应该放在JDK中的各种逻辑的转储。 以com.google.guava.base.Joiner为例。 它用于字符串连接:

Joiner joiner = Joiner.on("; ").skipNulls();
. . .
return joiner.join("Harry", null, "Ron", "Hermione");

不用了 我们现在可以写:

Stream.of("Harry", null, "Ron", "Hermione").filter(s -> s != null).collect(joining("; "));

还要注意,因为Streams API和lambda表达式使您可以很好地将skipNulls任务与过滤任务分离,所以不再需要skipNulls标志和所有其他其他skipNulls实用程序。

说服了吗 没有?

关于什么:

  • com.google.common.base.Optional > java.util.Optional
  • com.google.common.base.Predicate > java.util.function.Predicate
  • com.google.common.base.Supplier > java.util.function.Supplier

然后,还可以将整套的Functional东西扔到垃圾箱中:

https://code.google.com/p/guava-libraries/wiki/FunctionalExplained

当然,一旦确定要在整个应用程序中使用Guava,就不会很快删除其用法。 但另一方面,我们希望不久将弃用Guava的某些部分,而希望与Java 8集成。

乔达时间

现在,这很容易,因为流行的JodaTime库已标准化为java.time包。 这是个好消息。

让我们听听“ Joda” Stephen Colebourne以及他为JSR-310所做的出色工作。

Apache Commons-io

java.nio软件包通过与Streams API很好地集成(或不集成)的新方法变得更好。 任何人都会使用Apache Commons IO的主要原因之一是,在Java 7/8之前读取文件非常繁琐,我的意思是,谁会喜欢这段代码( 从这里开始 ):

try (RandomAccessFile file = new RandomAccessFile(filePath, "r")) {byte[] bytes = new byte[size];file.read(bytes);return new String(bytes); // encoding?? ouch!
}

超过这个?

List<String> lines = FileUtils.readLines(file);

但是忘记后者。 现在,您可以在java.nio.file.Files使用新方法,例如

List<String> lines = Files.readAllLines(path);

不再需要第三方库!

序列化

全部淘汰,因为JEP 154弃用了序列化。 嗯,它没有被接受,但是我们可以确定删除了大约10%的旧代码库。

多种并发API和助手

借助JEP 155 ,对并发API进行了多种改进,例如ConcurrentHashMaps(我们之前已经在此进行过博客讨论) ,以及令人敬畏的LongAdders,您可以在Takipi博客上阅读有关该文章的精彩文章 。

最近,我是否没有在Guava上看到整个com.google.common.util.concurrent包? 可能不再需要了。

当然,这是愚人节的玩笑……

Base64编码器

这怎么可能要花这么长时间? 在2003年,我们有了RFC 3548 ,指定了Base16,Base32和Base64数据编码,实际上是基于1993年的RFC 1521或1996年的RFC 2045中指定的base 64编码,如果我们愿意的话深入研究过去,我相信我们会找到更早的引用,这种引用将文本数据编码为文本形式的简单想法。

现在,在2014年,我们终于将JEP 135作为JavaSE8的一部分,因此(您不会相信): java.util.Base64

所有这些库都丢到垃圾桶了!

  • Apache Commons Codec (除非您正在使用该库中的其他怪异编码
  • JAXB的内部Base64编码器
  • 高瓦,再次
  • JEE的javax.mail.internet.MimeUtility
  • 码头的实施
  • 这很奇怪
  • 或者这很奇怪

…哎呀,似乎所有人和他们的狗都在JDK 8之前解决了这个限制。

更多?

在评论中提供您的建议! 我们很想听到您的想法(包括示例!)

结论

与任何Java主发行版一样,我们需要学习很多新东西,并且可以删除第三方库。 很好,因为许多好的概念已经合并到JDK中,每个JVM都可以使用它们,而无需外部依赖。

免责声明:并非本文中的所有内容都是认真的。 过去,许多人创作了很多作品。 即使它们现在已过时,它们也非常有用。 继续创新,伙计们!

是否想进一步研究Java 8提供的许多新功能? 去看看Baeldung博客,其中精选了以下Java 8资源列表:

http://www.baeldung.com/java8

…,请继续关注下周的Java 8 Friday博客!

翻译自: https://www.javacodegeeks.com/2014/05/java-8-friday-lets-deprecate-those-legacy-libs.html

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

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

相关文章

Educational Codeforces Round 10

652A - Gabriel and Caterpillar 20171128 按题意模拟即可 #include<stdlib.h> #include<stdio.h> #include<math.h> #include<cstring> #include<iostream> #include<algorithm> using namespace std; int h1,h2,a,b,ans1; int main()…

内存不足:杀死进程或牺牲孩子

现在是早上6点。 我清醒地总结了导致我太早醒来的电话的事件序列。 这些故事开始时&#xff0c;我的电话警报响了。 困倦而脾气暴躁的我检查了电话&#xff0c;看我是否真的疯了以至于无法在凌晨5点设置唤醒警报。 不&#xff0c;这是我们的监视系统&#xff0c;表明Plumbr服务…

将Array、Dictionary等集合类的序列化和反序列化

Objective-C的集合类序列化到文件中或者从文件中反序列化其实很简单&#xff0c;请看下面的示例代码&#xff1a; NSArray *array [NSArray arrayWithObjects:"Hefeweizen", "IPA", "Pilsner", "Stout", nil];NSDictionary *dictiona…

职场交流:一位软件工程师的7年总结

2009年05月13日15:06  来源&#xff1a;1、分享第一条经验&#xff1a;“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友 对这个道理有些体会吧。但我相信这一点也很重要&#xff1a;“重要的道理…

JavaFX 8u20天的未来过去(始终在最前面)

自从我发布有关JavaFX的主题以来已经有很长时间了。 因此&#xff0c;如果您仍在追随&#xff0c;那就太棒了&#xff01; 介绍 在这篇博客文章中&#xff0c;我想写一篇关于从JavaFX 8 update 20开始的非常酷的功能的博客&#xff0c;该功能使您的应用程序始终位于其他应用程…

cocos creator实战-(三)简单例子摇杆控制角色移动

&#xff08;待完善&#xff0c;给玩家加上摄像机跟随效果&#xff09; 1、stick监听cc.Node.EventType.TOUCH_MOVE事件&#xff0c;获取tick移动的坐标和朝向&#xff0c;限制移动的范围 2、根据stick的朝向&#xff0c;每帧更新player的位置和方向 // 摇杆代码 joy_stick.jsc…

php构造数组,并把多数组插入php文件

晚上做的一点东西&#xff0c;发出来大家共享下&#xff01; Code<?php //php 链接数据库mysql_connect("localhost", "root", "hicc") or die("Could not connect: " . mysql_error());mysql_select_db("babyker");$re…

针对新手的Java EE7和Maven项目–第6部分

从前面的部分恢复 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分 &#xff0c; 第4 部分 &#xff0c; 第5部分 在上一篇文章&#xff08;第5部分&#xff09;中&#xff0c;我们发现了如何使用Arquillian&#xff08;我们的EJB服务&#xff09;进行单元测试&#xf…

Starter pom

以下图片是引用书籍内容&#xff1a; 比如你在用boot写一个web项目&#xff0c;在maven中你会导入&#xff1a; <!-- 导入spring boot的web支持 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-we…

在 CentOS/Fedora 下安装 JAVA 环境

介绍 本文介绍如何在 CentOS 7&#xff08;6/6.5&#xff09;、 Fedora、RHEL 上安装 Java。Java是一个流行的软件平台&#xff0c;允许您运行Java应用程序。 本文涵盖了以下Java版本的安装&#xff1a; OpenJDK 8Oracle Java 8先决条件 在开始之前&#xff0c;您应该有一个能够…

ActiveMQ –经纪人网络解释–第5部分

在前面的第4部分中&#xff0c;我们已经看到了如何使用网络连接器在队列中平衡远程使用者的负载。 在第5部分中&#xff0c;我们将看到如果在某个主题上有并发远程持久订阅者&#xff0c;则相同的配置将如何工作。 考虑以下配置…。 图1&#xff1a;经纪人网络–主题上的负载…

小程序: 域名配置

1. 问题 在小程序中&#xff0c;如果我们没有在微信公众平台: 配置 https开头的、备案过的域名话&#xff0c;调用该域名下的接口&#xff0c;就会报错 当然&#xff1a; 如果只是简单的学习下小程序使用的话&#xff0c;可以不校验域名 — 微信开发者工具中&#xff1a; 详情 …

C++迭代器简介

迭代器是一种检查容器内元素并遍历元素的数据类型。 标准库为每一种标准容器&#xff08;包括 vector&#xff09;定义了一种迭代器类型。迭代器类型提供了比下标操作更通用化的方法&#xff1a;所有的标准库容器都定义了相应的迭代器类型&#xff0c;而只有少数的容器支持下标…

硅谷企業面臨新的反壟斷枷鎖

硅谷的公司正面臨著加強反壟斷審查的新階段﹐這是對奧巴馬政府加強執法和持續不斷的海外壓力所做出的反應。 對在其行業中佔據主導地位的企業採取更嚴格的立場可能會考驗這些科技業巨頭在布什政府時期採取的政府關係策略。Associated Press奧巴馬政府任命的司法部負責反壟斷執法…

Spring Java配置:会话超时

当您可以使用基于Java的配置开发Spring应用程序时&#xff0c;我们生活在一个美好的时光。 不再有多余的XML代码&#xff0c;只有纯Java代码。 在本文中&#xff0c;我想讨论一个关于Spring应用程序中会话管理的热门话题。 更确切地说&#xff0c;我将以Java配置样式讨论会话超…

分而治之思想

当一个问题的规模很大时&#xff0c;直接求解往往比较困难。对于这类问题&#xff0c;很大一部分是可以采取分而治之的思想来处理的。 分治法是把问题划分成多个子问题来进行处理。这些子问题&#xff0c;在结构上跟原来的问题一样&#xff0c;但是规模比原来的问题要小。如果得…

诡异的DateTime.TryParseExact方法

老赵在介绍Routing扩展的WebCast中出了点“小状况”&#xff0c;即将DateTime.ToString(“yyyy-MM-dd”)修改为DateTime.ToString(“yyyy/MM/dd”)后&#xff0c;页面中仍然显示为yyyy-MM-dd样式的日期格式。相信看过WebCast的同学都还记得吧。我不解&#xff0c;将老赵代码中D…

iSlide——图标库、图示库的用法

iSlide中&#xff0c;有一个“图示库”功能&#xff0c;主要功能是同时排列多块文字或多张图片。单击插图库&#xff0c;会弹出一个新的对话框。从中&#xff0c;可以选择权限、分类、数量数据和样式&#xff0c;也可以直接搜索。 下面就举一个例子&#xff1a;我要开一个班队会…

查看系统剩余空间

1.剩余空间&#xff1a;df -h 2.追踪最耗费硬盘的文件位置 cd /du -h --max-depth1 | sort -rn 转载于:https://www.cnblogs.com/xiaobiaomei/p/10669159.html

『ExtJS』01 001. ExtJS 4 类的定义

ExtJS 4 类的定义类的定义与类方法的调用 样例代码// Define new class Vehicle under the Cookbook namespaceExt.define(Cookbook.Vehicle, {// class configuration goes hereManufacturer : Aston Martin,Model : Vanquish,getDetails : function() {alert(I am an this…