Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java流API获取大写字符作为字符串_Java_Java Stream - Fatal编程技术网

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

使用Java流API获取大写字符作为字符串,java,java-stream,Java,Java Stream,我试图通过以下方式获得大写字母: "My Name Is".chars() .filter(c-> c > 64 && c < 97 ) .collect(<??>); “我的名字是”.chars() .filter(c->c>64&&cc>64&&cabbr.append(Character.toChars(c)); 是否可以使用更好/更短的collect()构造?字符串结果= String result = "My Name Is".

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

"My Name Is".chars()
.filter(c-> c > 64 && c < 97 )
.collect(<??>);
“我的名字是”.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)));
StringBuilder abbr=new StringBuilder();
“我的名字是“.chars()
.filter(c->c>64&&c<97)
.forEach(c->abbr.append(Character.toChars(c));
是否可以使用更好/更短的collect()构造?

字符串结果=
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();
“我的名字是“.chars() .filter(c->c>64&&c<97) .collect(StringBuilder::新建, (sb,c)->sb.append((char)c), (sb1,sb2)->sb1.append(sb2.toString()) .toString();
您可以使用
收集器


请注意,我还使用
字符.isUpperCase
收集(StringBuilder::new,StringBuilder::appendCodePoint,StringBuilder::append)
字符.isUpperCase
。这是否违反了谓词接口。然而它interesting@sakhunzai为什么会违反它?我的意思是它通常是1参数->返回bool1格式。我只是在学习。您还可以添加一些collect()构造所需的描述。如果您有一个参数(int),isUpperCase将返回一个布尔值,那么我看不出在哪里违反了约定。对于collect,请看javadoc,它解释得很好。您不需要像在
收集器中那样指定空的
字符串。如果不需要分隔符,可以使用
collector.joining()
String upper = "My Name Is".chars()
                           .filter(Character::isUpperCase)
                           .mapToObj(c -> Character.toString((char)c))
                           .collect(Collectors.joining());