日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

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

發(fā)布時間:2023/12/3 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 8 Friday:让我们弃用那些旧版库 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

在Data Geekery ,我們喜歡Java。 而且,由于我們真的很喜歡jOOQ的流暢的API和查詢DSL ,我們對Java 8將為我們的生態(tài)系統(tǒng)帶來什么感到非常興奮。

Java 8星期五

每個星期五,我們都會向您展示一些不錯的教程風(fēng)格的Java 8新功能,這些功能利用了lambda表達(dá)式,擴(kuò)展方法和其他好東西。 您可以在GitHub上找到源代碼 。

在過去的兩個星期五,我們一直在復(fù)活節(jié)休息,但現(xiàn)在我們又回來了另一篇有趣的文章:

讓我們棄用那些舊版庫

除了Lambda和擴(kuò)展方法外,JDK還通過許多新的庫代碼得到了增強(qiáng),例如Streams API等。 這意味著我們可以批判性地檢查堆棧,并且–令Deprecator醫(yī)生感到高興–丟棄了我們不再需要的所有垃圾。

這里有幾個,僅舉幾例:

LINQ風(fēng)格的庫

有很多庫試圖模擬LINQ(即LINQ-to-Collections部分)。 Oracle認(rèn)證Streams Developer認(rèn)證無處不在。

不要誤會我的意思。 這與LINQ或Streams更好無關(guān)。 它們幾乎相同。 但是,既然我們現(xiàn)在在JDK中具有Streams,為什么還要擔(dān)心LINQ? 此外,用于集合查詢的SQLesque語法還是有誤導(dǎo)作用。 蘭伯達(dá)

這是通過奧秘和討厭的技巧(例如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()之后的分號; 在那個不是真正的閉包主體的偽閉包實現(xiàn)塊之前……所有這些似乎都很古怪!

現(xiàn)在,我們將編寫:

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

這里沒有魔術(shù),只有簡單的Java 8。

讓我們最后一次聽到Mario Fusco和Lambdaj的故事 。

Linq4j

顯然,這仍在積極開發(fā)中……為什么? 請注意,該路線圖中還具有LINQ-to-SQL實現(xiàn),包括:

解析器支持。 修改Java解析器(例如OpenJDK),或編寫預(yù)處理器。 生成包含表達(dá)式樹的Java代碼。

是的,我們也想為jOOQ提供這樣的解析器。 這將使我們能夠?qū)QL真正嵌入到Java中,類似于SQLJ ,但是類型安全。 但是,如果我們擁有Streams API,為什么不立即實現(xiàn)類似Julian Hyde的Linq4j之類的東西,因為他仍在繼續(xù)工作。 但是我們認(rèn)為他在錯誤的角落投資。

集合體

這是一個有趣的名稱庫,它可以執(zhí)行以下操作:

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

但是,為什么這樣寫,當(dāng)您可以寫時:

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());

讓我們?yōu)閃agner Andrade聽聽。 然后到垃圾箱

一半的番石榴

番石榴幾乎是所有應(yīng)該放在JDK中的各種邏輯的轉(zhuǎn)儲。 以com.google.guava.base.Joiner為例。 它用于字符串連接:

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

不用了 我們現(xiàn)在可以寫:

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

還要注意,因為Streams API和lambda表達(dá)式使您可以很好地將skipNulls任務(wù)與過濾任務(wù)分離,所以不再需要skipNulls標(biāo)志和所有其他其他skipNulls實用程序。

說服了嗎 沒有?

關(guān)于什么:

  • 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

當(dāng)然,一旦確定要在整個應(yīng)用程序中使用Guava,就不會很快刪除其用法。 但另一方面,我們希望不久將棄用Guava的某些部分,而希望與Java 8集成。

喬達(dá)時間

現(xiàn)在,這很容易,因為流行的JodaTime庫已標(biāo)準(zhǔn)化為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);

但是忘記后者。 現(xiàn)在,您可以在java.nio.file.Files使用新方法,例如

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

不再需要第三方庫!

序列化

全部淘汰,因為JEP 154棄用了序列化。 嗯,它沒有被接受,但是我們可以確定刪除了大約10%的舊代碼庫。

多種并發(fā)API和助手

借助JEP 155 ,對并發(fā)API進(jìn)行了多種改進(jìn),例如ConcurrentHashMaps(我們之前已經(jīng)在此進(jìn)行過博客討論) ,以及令人敬畏的LongAdders,您可以在Takipi博客上閱讀有關(guān)該文章的精彩文章 。

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

當(dāng)然,這是愚人節(jié)的玩笑……

Base64編碼器

這怎么可能要花這么長時間? 在2003年,我們有了RFC 3548 ,指定了Base16,Base32和Base64數(shù)據(jù)編碼,實際上是基于1993年的RFC 1521或1996年的RFC 2045中指定的base 64編碼,如果我們愿意的話深入研究過去,我相信我們會找到更早的引用,這種引用將文本數(shù)據(jù)編碼為文本形式的簡單想法。

現(xiàn)在,在2014年,我們終于將JEP 135作為JavaSE8的一部分,因此(您不會相信): java.util.Base64 。

所有這些庫都丟到垃圾桶了!

  • Apache Commons Codec (除非您正在使用該庫中的其他怪異編碼
  • JAXB的內(nèi)部Base64編碼器
  • 高瓦,再次
  • JEE的javax.mail.internet.MimeUtility
  • 碼頭的實施
  • 這很奇怪
  • 或者這很奇怪

…哎呀,似乎所有人和他們的狗都在JDK 8之前解決了這個限制。

更多?

在評論中提供您的建議! 我們很想聽到您的想法(包括示例!)

結(jié)論

與任何Java主發(fā)行版一樣,我們需要學(xué)習(xí)很多新東西,并且可以刪除第三方庫。 很好,因為許多好的概念已經(jīng)合并到JDK中,每個JVM都可以使用它們,而無需外部依賴。

免責(zé)聲明:并非本文中的所有內(nèi)容都是認(rèn)真的。 過去,許多人創(chuàng)作了很多作品。 即使它們現(xiàn)在已過時,它們也非常有用。 繼續(xù)創(chuàng)新,伙計們!

是否想進(jìn)一步研究Java 8提供的許多新功能? 去看看Baeldung博客,其中精選了以下Java 8資源列表:

http://www.baeldung.com/java8

…,請繼續(xù)關(guān)注下周的Java 8 Friday博客!

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

總結(jié)

以上是生活随笔為你收集整理的Java 8 Friday:让我们弃用那些旧版库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。