在 Java 的最新更新中,String 类经历了一系列重要的方法添加。某些方法现在生成 Stream 类的实例,而其中一些是高阶函数。合并这些方法的目的是提供一种简化的方法,用于以面向流的方式处理字符串。
以面向流的方式处理字符串具有简化代码和增强表现力的优点。这样可以更轻松地应用过滤、映射、缩减等操作。
另一个优点是 Stream API 支持并行处理,允许将并行流与这些返回流的方法一起使用。这使得利用多核处理器来高效处理大型字符串成为可能。
本文深入探讨了 String 类中的一些方法,这些方法使处理能够以函数式编程方式进行。
chars (): ‘chars ()’ 方法通过返回一个 IntStream 来促进 Java 中的有效字符管理。此 IntStream 表示一系列 Integer 值,每个值对应于所提供字符串中字符的 Unicode 码位。
码位是分配给 Unicode 标准中字符的数字标识符,用于字符编码。
让我们通过一个例子来理解“chars ()”。编写一个程序,从字符串中删除给定的字符。让我们探索如何通过命令式的、非功能式的方法来解决这一挑战,避免使用 chars() 或流方法。
private static String removeChar(String input, char c){
StringBuilder sb = new StringBuilder();
char[] charArray = input.toCharArray();
for (char ch : charArray) {
if (ch != c) {
sb.append(ch);
}
}
return sb.toString();
}
让我们将其与函数式方法进行比较:
private static String removeChar(String str, char c){
return str.chars()
.filter(ch -> ch != c)
.mapToObj(ch -> String.valueOf((char) ch))
.collect(Collectors.joining());
}
命令式非函数式方法涉及使用 StringBuilder 生成修改后的字符串对字符进行传统迭代。另一方面,函数式方法利用了 chars() 方法和 Stream API,提供了更简洁、更具表现力的解决方案。
变换 ( ):transform 函数是一个接受 Function 作为参数的高阶函数。transform 函数提供了一种更简洁、更实用的方式来将转换应用于字符串。
transform 函数可用于链接字符串中的转换,例如,考虑要清理和格式化在表单中输入的用户输入的场景。用户可能会使用额外的空格、混合大写和不必要的字符输入他们的名字。可以使用字符串链接来标准化和清理此输入。
String userInput = " JoHN-dOe ";
String cleanedInput = userInput
.transform(String :: trim)
.transform(String :: toLowerCase)
.transform(user -> user.replaceAll("-", ""));
cleanedInput // johndoe
行 (): lines 函数返回从给定字符串中提取的行流,这些行由行终止符(如 \n、\r 和 \r\n)分隔。Java String lines() 方法被证明比 split() 方法更有优势,因为它的延迟元素供应和更快的行终止符检测。如果字符串为空,则行函数返回零行。
String text = "The lines function returns a stream of lines extracted ,\nThe Java String lines() method proves advantageous ;\nIn cases where the string is empty,\n"
+ "the lines’ function returns zero lines.";
text.lines()
.map(String :: toUpperCase)
.filter(line -> line.contains("I"))
.forEach(System.out::println);
“text”字符串包含多行文本。我们使用 lines() 方法从文本中获取行流。然后,我们使用 map 操作将每行转换为大写。应用筛选器操作以仅保留包含字母“I”的行,而 forEach 操作打印修改后的行。
所解释的函数提供了一种强大而简洁的字符串处理方式。它们通过利用流进行有效的操作和过滤来提供一种功能方法,从而促进不变性。将这些函数与其他流操作链接起来,可以实现复杂而简洁的转换,从而促进更简洁、更实用的样式。