- 你有一個思想,我有一個思想,咱們交換後,一我的就有兩個思想
- If you can NOT explain it simply, you do NOT understand it well enough
現陸續將Demo代碼和技術文章整理在一塊兒 Github實踐精選,本文一樣收錄在此,方便你們閱讀查看,以爲不錯,還請Star🌟html
平常工做對集合操做真的太頻繁了,前端時間就寫過一篇關於Java 12 集合的文章 Java12 Collectors.teeing 的使用詳解 , 有朋友留言說這個功能比較好用。我的以爲 Java12還有幾個特性能夠嘗試使用,這篇文章就出爐了前端
若是你目前使用的Java版本不是12,也沒有關係,早已爲你準備好良方,SDKMAN 統一靈活管理多版本Java ,可讓你快速各類嚐鮮新特性java
indent
「縮進」這個單詞你們很熟悉了,這是Java12處理字符串的新功能,先來看方法定義:git
該方法很簡單,只接收一個 int
類型的參數表示縮進值,這裏的 n 既能夠是正數,也能夠是負數,只不過是增長空格 space
和移除空格的差異,來看個例子:github
String result = "foo\nbar\nbar2".indent(4); System.out.println(result);
打印結果是這樣的(考驗眼力的時候到了,仔細看截圖在IDE中設置的縮進小點點😜):算法
調用 indent 方法會自動添加一個換行符號 \n
,在該方法的實現中也明確給了註釋說明,目的是爲了行終結符的規範化segmentfault
注意:對於 Tab
就是當成一個字符來看到,好比咱們把上面的例子稍做修改:後端
String result = "foo\nbar\n\tbar2".indent(4); System.out.println(result);
來看打印結果,注意和上面的不一樣:api
就是這麼簡單,咱們繼續向下看工具
transform
「轉換」,咱們常常會遇到字符串形勢轉換的需求,transform方法接收一個 Function 類型的參數, 生成一個全新形式的字符串
List<String> names = List.of( " Alex", "brian"); List<String> transformedNames = new ArrayList<>(); for (String name : names){ String transformedName = name.transform(String::strip) .transform(StringUtils::toCamelCase); transformedNames.add(transformedName); }
有朋友可能會說,這個和單純的對字符串 trim 或者其餘操做有什麼區別啊?由於接受的參數是 Function類型,當Function類型做爲入參時,內部的處理邏輯將增長更多靈活性
有時候,咱們須要比較兩個文件的內容是否相同,這個API就派上用場了,該方法比較兩個 path 下的文件,而且返回一個 long 值,這個值表示第一處不匹配的字節位置。若是返回-1,說明兩個文件相等,仍是來看個例子:
Path file1 = Paths.get("/Users/fraser/Documents/projects/personal/learning-demo-collection/jdk12-demo/src/file1.txt"); Path file2 = Paths.get("/Users/fraser/Documents/projects/personal/learning-demo-collection/jdk12-demo/src/file2.txt"); try { long mismatch = Files.mismatch(file1, file2); System.out.println(mismatch); } catch (IOException e) { e.printStackTrace(); }
兩個文件內容分別是:
//file1.txt 你們好,我是日拱一兵,叫我拱哥就好 //file2.txt 你們好,我是日拱一兵,叫我兵兵就好
查看運行結果:
建議你們查看一下
mismatch
的實現邏輯,有個小算法在裏面的
當下,Emoji 表情符號在社交媒體渠道上扮演着重要角色,因此支持最新的 Unicode 規範比以往任什麼時候候都更重要。Java 12保持了同步並支持Unicode 11。Unicode 11增長了684個字符,共137,374個字符,增長了7個新腳本,共146個腳本。
這個更改擴展了switch語句。爲何這麼說?
boolean isWeekend = switch (day) { case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> false; case SATURDAY, SUNDAY -> true; default -> throw new IllegalStateException("Illegal day entry :: " + day); }; System.out.println(isWeekend);
注意: 要使用此預覽特性,請記住,咱們必須在應用程序啓動期間使用-enable-preview標誌顯式地指示JVM。
由用戶界面或命令行工具呈現的大數字老是很難展示。使用數字的縮寫形式則要直觀不少。前端爲了更有好的數據展示形式,很早就有相應的組件實現了。如今後端小夥伴也能夠在java12中應用這個特性了
緊湊的數字表示更易於閱讀,而且在不丟失原始含義的狀況下,在屏幕上須要更少的空間。
例子:3.6M
比3,600,000
容易讀得多
Java 12 引入了一個叫作 NumberFormat.getCompactNumberInstance(Locale, NumberFormat.Style)的靜態方法。用於建立緊湊數字表示形式,來看例子:
NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); String formattedString = formatter.format(25000L); System.out.println(formattedString);
來看運行結果:
另外,CompactNumberFormat 是 NumberFormat的子類,咱們能夠自定義它的實例(其實就是格式化樣式等),很簡單,這個你們自行查看吧
Java近兩年升級真是太快了,瞭解一些新功能老是沒錯的,你們動手實踐試試吧,之後遇到相似的需求至少能避免咱們重複造輪子了.....
歡迎關注個人公衆號 「日拱一兵」,趣味原創解析Java技術棧問題,將複雜問題簡單化,將抽象問題圖形化落地
若是對個人專題內容感興趣,或搶先看更多內容,歡迎訪問個人博客 dayarch.top