2014-11-08 42 views
1

我试图让大写字母获取资本字符的字符串:使用Java流API

"My Name Is".chars() 
.filter(c-> c > 64 && c < 97) 
.collect(<??>); 

我不知道我应该通过收集()方法得到的字符或字符串列表。

我的目的是分析串并得到它只有大写字母

这工作正常,另一个字符串:

StringBuilder abbr=new StringBuilder(); 
"My Name Is".chars() 
      .filter(c -> c > 64 && c < 97) 
      .forEach(c->abbr.append(Character.toChars(c))); 

是可以使用收集()构建的,甚至更好/更短的方式?

回答

1

您可以使用Collectors.joining("")

String upper = "My Name Is".chars() 
          .filter(Character::isUpperCase) 
          .mapToObj(c -> Character.toString((char)c)) 
          .collect(Collectors.joining()); 

请注意,我也使用Character.isUpperCase

+0

'Character.isUpperCase'。这不违反谓词接口吗?不过其有趣的 – sakhunzai 2014-11-08 17:02:10

+0

@sakhunzai为什么会违反它? – user2336315 2014-11-08 17:04:07

+0

我的意思是它通常是1param - >返回bool1格式。我只是在学习。您还可以添加一些描述什么collect()构造期望。谢谢 – sakhunzai 2014-11-08 17:06:16

1
String result = 
    "My Name Is".chars() 
       .filter(c -> c > 64 && c < 97) 
       .collect(StringBuilder::new, 
         (sb, c) -> sb.append((char) c), 
         (sb1, sb2) -> sb1.append(sb2.toString())) 
       .toString(); 
+1

或'.collect(StringBuilder :: new,StringBuilder :: appendCodePoint,StringBuilder :: append)'。 – user2336315 2014-11-08 15:17:00

+0

不知道appendCodePoint(),谢谢。 – 2014-11-08 15:19:05