2014-11-08 79 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