【问题标题】:What does this Java 8 stream code mean?这个 Java 8 流代码是什么意思?
【发布时间】:2017-08-03 23:48:43
【问题描述】:
boolean isA2Z(String str) {

        return (str.chars().filter(i -> i >= 'a' && i <= 'z').distinct().count() == 26);
    }

从方法名看,好像是在测试一个String是否包含a->z的字母,但是看起来不对?

它从字符串中收集单个字符,然后返回流的计数。这怎么行?

【问题讨论】:

  • 流式传输字符,仅过滤 a-z、非重复项和计数...查看 == 26 是否意味着所有英文字母都存在...
  • 它测试字母表中的每个字母是否至少出现一次。

标签: java java-stream


【解决方案1】:

str.chars() --> 为字符串中的字符返回IntStream

filter(i -&gt; i &gt;= 'a' &amp;&amp; i &lt;= 'z') --> 过滤,只允许[a, z](含)进行下一个处理函数

distinct() --> 获取所有不同的值

count() --> 数数从这里经过的物品。

它在功能上检查字符串是否包含所有小的 [a, z](包括)至少一次。 (此处避免极端情况)

【讨论】:

    【解决方案2】:

    这是它的工作原理,一步一步:

    1. 将字符串转换为单个字符列表
    2. 排除不在“a”和“z”(含)之间的任何字符
    3. 创建一个唯一的剩余字符列表
    4. 统计唯一字符数
    5. 如果数字是 26,则返回 true;否则返回false

    换句话说,当且仅当输入字符串包含从 a 到 z 的每个小写字母至少出现一次时,该方法才返回 true。

    【讨论】:

      【解决方案3】:

      假设字符串是否跟随

      "abbcdefghijklmnopqrstuvwxyz"

      此方法将返回 true。方法是检查字符串是否包含从 a 到 z 的所有字母,无论它们是否重复。

      【讨论】:

        猜你喜欢
        • 2011-05-28
        • 2011-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多