Java Stream 的不同字符计数

2024 年 9 月 10 日 | 阅读 3 分钟

在 Java 编程的世界里,您可能需要在给定字符串中计算不重复字符数。无论我们是处理文本分析工具、文字游戏,还是任何涉及文本数据的应用程序,了解如何高效地计算不重复字符数都是一项宝贵的技能。Java Streams 提供了一种优雅简洁的方法来实现这一点。在本节中,我们将探索使用 Java Streams 计算字符串中不重复字符数的不同方法,并附有代码示例和详细解释。

方法 1:使用 Streams 和 Sets

计算字符串中不重复字符数的最简单高效的方法之一是利用 Java Streams 和 Set。以下是分步实现:

DistinctCharacterCountExample.java

输出

Distinct Character Count: 9

解释

我们使用 inputString.chars() 将输入字符串转换为字符流。然后,我们使用 .mapToObj(c -> (char) c) 将每个字符的 Unicode 值映射回 char,从而得到一个字符流。我们使用 Collectors.toSet() 将这些字符收集到一个 Set 中,确保只保留不重复的字符。最后,我们计算 Set 的大小,这就是不重复字符的数量。

方法 2:使用 Streams 和 Distinct 和 Count

Java Streams 提供了一个方便的 distinct 方法来过滤重复的元素。我们可以将此方法与 count 结合使用来计算不重复字符数。

DistinctCharacterCountExample.java

输出

Distinct Character Count: 9

解释

我们首先将输入字符串转换为字符流,然后将其映射到 Character 对象流。我们应用 distinct 方法来保留流中的唯一字符。最后,我们使用 count 方法来获取不重复字符的数量。

方法 3:使用 Collectors.toCollection() 和 LinkedHashSet

另一种方法是使用 Collectors.toCollection() 方法和 LinkedHashSet,它在确保元素唯一的同时保留插入顺序。

DistinctCharacterCountExample.java

输出

Distinct Character Count: 9

解释

我们将输入字符串转换为字符流,并将其映射到 Character 对象流。我们使用 Collectors.toCollection(LinkedHashSet::new) 来收集不重复的字符。它会自动维护插入顺序。通过获取 LinkedHashSet 的大小来获得计数。

方法 3:使用 Collectors.groupingBy() 方法计算不重复字符数

DistinctCharacterCountExample.java

输出

Distinct Character Count: 11

解释

将输入字符串转换为字符流,然后将其映射到 Character 对象流。使用 Collectors.groupingBy() 根据字符的标识(即字符本身)对字符进行分组,并使用 Collectors.counting() 对它们进行计数。这将生成一个 map,其中键是不重复的字符,值是每个字符的计数。最后,我们计算 map 的大小以获得不重复字符的数量。

结论

在 Java 编程中,计算字符串中的不重复字符是一项常见任务,而 Java Streams 为高效地解决此问题提供了优雅的解决方案。这里介绍的方法使我们能够以简洁可读的方式计算不重复字符,从而使您的代码更易于维护和更具表现力。无论您是偏爱使用 Set、distinct 还是 LinkedHashSet,我们都有多种选择,每种选择在不同场景下都有其独特的优势。