首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数中Java8流map()函数中的附加括号

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

Stack Overflow用户
提问于 2017-09-19 20:13:31
回答 2查看 3.7K关注 0票数 1

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

代码语言:javascript
复制
        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> x.toUpperCase())
        .collect(Collectors.toList());

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

代码语言:javascript
复制
        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> {
        x.toUpperCase();
    }).collect(Collectors.toList());

警告:

代码语言:javascript
复制
The method map(Function<? super String,? extends R>) in the type Stream<String> is not applicable for the arguments ((<no type> x) -> {})

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-19 20:17:42

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

代码语言:javascript
复制
List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
List<String> wordLengths = words.stream().map((x) -> {
    return x.toUpperCase();
}).collect(Collectors.toList());
票数 6
EN

Stack Overflow用户

发布于 2017-09-19 22:48:42

根据官方的Oracle教程

lambda表达式由以下内容组成: 用逗号分隔的形式参数列表,括在括号内。CheckPerson.test方法包含一个参数p,它表示Person class的一个实例。 注意:可以省略lambda表达式中参数的数据类型。此外,如果只有一个参数,则可以省略括号。例如,以下lambda表达式也是有效的: P -> p.getGender() == Person.Sex.MALE && p.getAge() >= 18 & p.getAge() <= 25 箭头标记,-> 主体,由单个表达式或语句块组成。此示例使用以下表达式: p.getGender() == Person.Sex.MALE && p.getAge() >= 18 & p.getAge() <= 25 如果指定一个表达式,则Java运行时将计算该表达式,然后返回其值。或者,您也可以使用返回语句: P -> {返回p.getGender() == Person.Sex.MALE && p.getAge() >= 18 & p.getAge() <= 25;} 返回语句不是表达式;在lambda表达式中,必须用大括号({})括住语句。但是,不必将空方法调用包含在大括号中。例如,以下是一个有效的lambda表达式: 电子邮件-> System.out.println(电子邮件)

由于提供的lambda表达式(x) -> x.toUpperCase()中只有一个参数,所以可以省略括号:x -> x.toUpperCase()String#toUpperCase返回一个新的String,因此不需要使用return语句和大括号。如果相反,我们有一个包含返回语句的复杂块,那么我们必须将它括在大括号中。此外,在这种情况下,最好使用方法参考 String::toUpperCase

代码语言:javascript
复制
List<String> wordLengths = words.stream().map(String::toUpperCase).collect(Collectors.toList()); 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46309032

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档