<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 12 – 新特性和增強特性 > 原文: [https://howtodoinjava.com/java12/new-features-enhancements/](https://howtodoinjava.com/java12/new-features-enhancements/) Java 12(于 2019 年 3 月 19 日發布)是 JDK 的最新版本。 讓我們看看它為開發人員和建筑師帶來的新特性和改進。 ## 1\. 流 API 中的`Collectors.teeing()` `teeing`收集器已作為靜態方法公開`Collectors::teeing`。 在將其結果與函數合并之前,此收集器將其輸入轉發給其他兩個收集器。 `teeing(Collector, Collector, BiFunction)`接受兩個收集器和一個函數來合并其結果。 傳遞給結果收集器的每個元素都由兩個下游收集器處理,然后使用指定的合并函數將其結果合并為最終結果。 例如,在給定的雇員列表中,如果我們想找出最高薪水和最低薪水的雇員,則可以使用`teeing`收集器在單個語句中完成。 ```java SalaryRange salaryRange = Stream .of(56700, 67600, 45200, 120000, 77600, 85000) .collect(teeing( minBy(Integer::compareTo), maxBy(Integer::compareTo), SalaryRange::fromOptional)); ``` 閱讀更多:[`Collectors.teeing()`](https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/util/stream/Collectors.html#teeing(java.util.stream.Collector,java.util.stream.Collector,java.util.function.BiFunction)) ## 2\. 字符串 API 的更改 #### 2.1 `String.indent()` 縮進方法有助于更改字符串的縮進。 我們可以傳遞一個正值或一個負值,具體取決于我們是要添加更多的空白還是要刪除現有的空白。 ```java String result = "foo\nbar\nbar2".indent(4); System.out.println(result); // foo // bar // bar2 ``` 請注意,[`indent()`](https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/String.html#indent(int))方法會自動添加換行符(如果尚未提供)。 這是預料之中的,并且是新方法的特性。 > 每個空格字符都被視為一個字符。 特別是,制表符`"\t" (U+0009)`被視為單個字符; 它不會擴展。 #### 2.2 `String.transform()` `transform()`方法采用[`String`](https://howtodoinjava.com/java-string/)并借助`Function`將其轉換為新的`String`。 在給定的示例中,我們有一個名稱列表。 我們正在使用`transform()`方法執行兩個操作(修剪空白并使所有名稱都大寫)。 ```java 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); } ``` #### 2.3 字符串常量 從 Java 12 開始,`String`類實現了兩個附加接口`java.lang.constant.Constable`和`java.lang.constant.ConstantDesc`。 `String`類還引入了兩個附加的低級方法`describeConstable()`和`resolveConstantDesc(MethodHandles.Lookup)`。 它們是低級 API,適用于提供字節碼解析和生成特性的庫和工具,例如 ByteBuddy。 請注意,`Constable`類型是一種值,該值是可以在 Java 類文件的常量池中表示的常量,如 [JVMS 4.4](https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.4) 中所述,并且其實例可以名義上將自己描述為`ConstantDesc`。 `resolveConstantDesc()`與`describeConstable()`相似,不同之處在于此方法改為返回`ConstantDesc`的實例。 ## 3\. `Files.mismatch(Path, Path)` 有時,我們想確定兩個文件是否具有相同的內容。 該 API 有助于比較文件的內容。 `mismatch()`方法比較兩個文件路徑并返回`long`值。 `long`表示兩個文件內容中第一個不匹配字節的位置。 如果文件“相等”,則返回值為` – 1`。 ```java Path helloworld1 = tempDir.resolve("helloworld1.txt"); Path helloworld2 = tempDir.resolve("helloworld2.txt"); long diff = Files.mismatch(helloworld1, helloworld2); //returns long value ``` ## 4\. 精簡數字格式 用戶界面或命令行工具提供的大量數字始終很難解析。 使用數字的縮寫形式更為常見。 精簡數字表示形式更易于閱讀,并且在屏幕上占用的空間更少,而不會失去其原始含義。 例如。 **3.6 M** 比 **3,600,000** 更容易閱讀。 Java 12 引入了一種方便的方法,稱為`NumberFormat.getCompactNumberInstance(Locale,NumberFormat.Style)`,用于創建精簡數字表示形式。 ```java NumberFormat formatter = NumberFormat.getCompactNumberInstance(Locale.US, NumberFormat.Style.SHORT); String formattedString = formatter.format(25000L); //25K ``` ## 5\. 支持 Unicode 11 在表情符號在社交媒體渠道交流中發揮關鍵作用的時代,支持最新的 Unicode 規范比以往任何時候都更為重要。 Java 12 保持同步并支持 Unicode 11。 Unicode 11 增加了 684 個字符,總計 137,374 個字符 – 以及七個新腳本,總共 146 個腳本。 ## 6\. `switch`表達式(預覽) 此更改擴展了 [**`switch`語句**](https://howtodoinjava.com/java/basics/switch-statement-in-java/) ,以便可以將其用作語句或表達式。 不必為每個`case`塊定義[`break`](https://howtodoinjava.com/java/basics/break-keyword/)語句,我們只需使用**箭頭語法**即可。 箭頭語法在語義上看起來像 lambda,并且將`case`標簽與表達式分開。 使用新的`switch`表達式,我們可以將`switch`語句直接分配給變量。 ```java 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); //true or false - based on current day ``` > 要使用此預覽特性,請記住,我們必須在應用程序啟動期間使用` – enable-preview`標志明確指示 JVM。 向我提供有關 Java 12 中這些新 **API 更改的問題**。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看