使用Java Stream API将大写字符作为字符串获取

时间:2014-11-08 13:03:07

标签: java java-stream

我想通过以下方式获得大写字母:

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

我不确定我应该传递给collect()方法以获取字符列表或字符串。

我的目标是解析字符串并获取另一个只有大写字母

的字符串

这很好用:

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

是否可以使用更好/更短的方式的collect()构造?

2 个答案:

答案 0 :(得分:2)

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 :(得分:2)

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

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

请注意,我也使用Character.isUpperCase