Java8 流 map() 函数中的附加括号

Mic*_*213 1 java-8 java-stream

我正在 Java8 中工作/测试流,遇到了非常令人沮丧的问题。我有编译好的代码:

        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> x.toUpperCase())
        .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

第二个(几乎相同)抛出警告:

        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> {
        x.toUpperCase();
    }).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

警告:

The method map(Function<? super String,? extends R>) in the type Stream<String> is not applicable for the arguments ((<no type> x) -> {})
Run Code Online (Sandbox Code Playgroud)

这个额外的括号有什么变化?

Chr*_*hme 6

您的 lambda 表达式返回一个值。如果使用方括号,则需要向 lambda 函数添​​加 return 语句:

List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
List<String> wordLengths = words.stream().map((x) -> {
    return x.toUpperCase();
}).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)