2017-08-03 33 views
-3
boolean isA2Z(String str) { 

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

从方法名称看,它看起来像测试一个字符串是否包含来自a-> z的字母,但它看起来不正确?这个Java 8流代码是什么意思?

它从字符串中收集单个字符,然后返回流的计数。这如何工作?

+2

流字符,只筛选a-z,非重复项并计数...看if == 26意思是所有英文字母都在那里...... – Idos

+3

它测试字母表中每个字母是否至少存在一次。 – shmosel

回答

3

str.chars() - >返回IntStream用于字符字符串

filter(i -> i >= 'a' && i <= 'z') - >过滤,并只允许[A,Z](含)去下一个处理功能

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

count() - >统计在这里通过的项目。

它在功能上检查字符串是否至少包含所有小的[a,z](含)至少一次。 (避免极端案例在这里)

0

比方说,如果字符串以下

“abbcdefghijklmnopqrstuvwxyz”

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

1

下面是它如何工作的,一步一步:

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

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