Java 8 Java8 stream map()函数中的附加括号

Java 8 Java8 stream map()函数中的附加括号,java-8,java-stream,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()); Lis

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

        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> x.toUpperCase())
        .collect(Collectors.toList());
List words=Arrays.asList(“Oracle”、“Java”、“杂志”);
列表字长=words.stream().map((x)->x.toUpperCase())
.collect(Collectors.toList());
第二个(几乎相同)会发出警告:

        List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
    List<String> wordLengths = words.stream().map((x) -> {
        x.toUpperCase();
    }).collect(Collectors.toList());
List words=Arrays.asList(“Oracle”、“Java”、“杂志”);
List wordlength=words.stream().map((x)->{
x、 toUpperCase();
}).collect(Collectors.toList());
警告:

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

方法映射(函数lambda表达式返回值。如果使用括号,则需要向lambda函数添加返回语句:

List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
List<String> wordLengths = words.stream().map((x) -> {
    return x.toUpperCase();
}).collect(Collectors.toList());
List words=Arrays.asList(“Oracle”、“Java”、“杂志”);
List wordlength=words.stream().map((x)->{
返回x.toUpperCase();
}).collect(Collectors.toList());

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

List<String> words = Arrays.asList("Oracle", "Java", "Magazine");
List<String> wordLengths = words.stream().map((x) -> {
    return x.toUpperCase();
}).collect(Collectors.toList());
List words=Arrays.asList(“Oracle”、“Java”、“杂志”);
List wordlength=words.stream().map((x)->{
返回x.toUpperCase();
}).collect(Collectors.toList());

根据这位官员的说法

lambda表达式由以下内容组成:

用逗号分隔的形式参数列表,用括号括起来。
CheckPerson.test
方法包含一个参数p,该参数 表示
人员类的实例

注意:可以省略lambda中参数的数据类型 此外,如果只有 一个参数。例如,下面的lambda表达式也是 有效期:

如果指定单个表达式,则Java运行时将计算 表达式,然后返回其值 返回语句:

p -> {
    return p.getGender() == Person.Sex.MALE
        && p.getAge() >= 18
        && p.getAge() <= 25;
}
由于所提供的lambda表达式
(x)->x.toUpperCase()
中只有一个参数,因此可以省略括号:
x->x.toUpperCase()
String#toUpperCase
返回一个新的
String
,因此不需要使用
return
语句和大括号。如果我们有一个包含return语句的复杂块,我们就必须将其括在大括号中。此外,在这种情况下,最好使用
String::toUpperCase

List<String> wordLengths = words.stream().map(String::toUpperCase).collect(Collectors.toList()); 
List wordlength=words.stream().map(String::toUpperCase.collect(Collectors.toList());

根据这位官员的说法

lambda表达式由以下内容组成:

用逗号分隔的形式参数列表,用括号括起来。
CheckPerson.test
方法包含一个参数p,该参数 表示
人员类的实例

注意:可以省略lambda中参数的数据类型 此外,如果只有 一个参数。例如,下面的lambda表达式也是 有效期:

如果指定单个表达式,则Java运行时将计算 表达式,然后返回其值 返回语句:

p -> {
    return p.getGender() == Person.Sex.MALE
        && p.getAge() >= 18
        && p.getAge() <= 25;
}
由于所提供的lambda表达式
(x)->x.toUpperCase()
中只有一个参数,因此可以省略括号:
x->x.toUpperCase()
String#toUpperCase
返回一个新的
String
,因此不需要使用
return
语句和大括号。如果我们有一个包含return语句的复杂块,我们就必须将其括在大括号中。此外,在这种情况下,最好使用
String::toUpperCase

List<String> wordLengths = words.stream().map(String::toUpperCase).collect(Collectors.toList()); 
List wordlength=words.stream().map(String::toUpperCase.collect(Collectors.toList());

如果您使用的是括号,并且lambda的返回类型不是void,则必须在lambda正文中提供
return
关键字(另请参见)这不是一个
警告
,而是一个编译问题,完全不同如果您使用括号并且lambda的返回类型不是void,那么您必须在lambda主体中提供
return
关键字(另请参见),这不是一个
警告
而是一个编译问题,完全不同