首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 函數式編程(八):字符串流操作與方法引用實戰

     編輯:Java 相關知識

前言

Java 8 為 String 新增 chars() 返回 IntStream,配合 forEach、filter、mapToObj 等流操作,字符級處理變得聲明式且高效。本文結合方法引用的四種形式,演示字符串遍歷、過濾、轉換全流程。

chars() 基礎遍歷

String str = "w00t";

// 1. Lambda 打印字符碼點
str.chars().forEach(cp -> System.out.println(cp));
// 輸出: 119 48 48 116 (int 碼點)

// 2. 方法引用:System.out::println (實例方法引用)
str.chars().forEach(System.out::println); // 同樣輸出碼點

碼點轉字符:mapToObj + 方法引用

// 3. 自定義轉換方法
private static void printChar(int cp) { System.out.println((char) cp); }

// 類方法引用:IterateString::printChar
str.chars().forEach(IterateString::printChar);
// 輸出: w 0 0 t

// 4. 一體化:mapToObj 轉 Character 再打印
str.chars()
   .mapToObj(cp -> Character.valueOf((char) cp))
   .forEach(System.out::println);

過濾數字字符:filter + 靜態方法引用

// Lambda
str.chars().filter(cp -> Character.isDigit(cp)).forEach(IterateString::printChar);

// 靜態方法引用:Character::isDigit
str.chars().filter(Character::isDigit).forEach(IterateString::printChar);
// 輸出: 0 0

方法引用四大形式速查表

形式語法示例參數路由規則
靜態方法Class::staticMethodCharacter::isDigit參數直接傳給靜態方法
實例方法(特定對象)instance::methodSystem.out::println參數作為方法參數
實例方法(任意對象)Class::methodString::toUpperCase第一個參數作為調用者,其餘作為參數
構造器Class::newArrayList::new參數傳給構造器

方法引用歧義陷阱

// Double 同時有 toString() 實例方法 和 toString(double) 靜態方法
// Double::toString  // 編譯錯誤:歧義

// 解決:用 Lambda 明確語義
(double d) -> Double.toString(d)        // 靜態
(Double d) -> d.toString()              // 實例

實戰:統計字符串中各字符出現次數

Map<Character, Long> freq = str.chars()
    .mapToObj(cp -> (char) cp)
    .collect(Collectors.groupingBy(
        c -> c, Collectors.counting()
    ));
// {w=1, 0=2, t=1}

總結

String.chars() 打通字符串與 Stream 世界,方法引用讓管道操作極簡。掌握四種引用形式與參數路由規則,能將字符級處理代碼壓縮 50% 以上。下一篇將探討 Comparator 函數式重構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved