Java 8过滤器,但返回所有对象

Mat*_*ski 4 java java-8 java-stream

我需要找到大于5个字符的单词,然后将其反转。这样的代码可以正常工作:

public class SpinWords {

    private Function<String, String> reverse = s -> new StringBuilder(s).reverse().toString();


    public String spinWords(String sentence) {

        String whitespace = " ";

        List<String> split = Arrays.asList(sentence.split(whitespace));

        return split.stream().map(s -> {

            if (s.length() > 5) {
                s = reverse.apply(s);
            }

            return s;
        }).collect(Collectors.joining(whitespace));

    }

}
Run Code Online (Sandbox Code Playgroud)

但是由于我现在正在学习Java 8,因此我想将此is语句替换为流,而不使用大括号,而是使用Java 8替代方法。是否可能或此代码有效?

Era*_*ran 9

您可以使用三元条件运算符:

return split.stream()
            .map(s -> s.length() > 5 ? reverse.apply(s) : s)
            .collect(Collectors.joining(whitespace));
Run Code Online (Sandbox Code Playgroud)

编辑:正如纳曼建议的那样,整个方法可以简化为一个语句:

public String spinWords(String sentence) {
    return Arrays.stream(sentence.split(" "))
                 .map(s -> s.length() > 5 ? reverse.apply(s) : s)
                 .collect(Collectors.joining(" "));
}
Run Code Online (Sandbox Code Playgroud)