Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 获取第一个元素并在应用函数后返回_Java_Lambda_Java 8_Functional Programming_Java Stream - Fatal编程技术网

Java 获取第一个元素并在应用函数后返回

Java 获取第一个元素并在应用函数后返回,java,lambda,java-8,functional-programming,java-stream,Java,Lambda,Java 8,Functional Programming,Java Stream,我是Java8新手,我想创建一个方法,在应用函数后获取匹配的第一个元素并返回 public void test() { List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API"); String str = features .stream() .filter(s ->

我是Java8新手,我想创建一个方法,在应用函数后获取匹配的第一个元素并返回

public void test() {
    List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");

    String str = features
            .stream()
            .filter(s -> "Lambdas".equals(s))
            .findFirst()
            .ifPresent(this::toLowerCase);
}

private String toLowerCase (String str) {
    return str.toLowerCase();
}
公共无效测试(){
List features=Arrays.asList(“Lambdas”、“默认方法”、“流API”、“日期和时间API”);
字符串str=特征
.stream()
.filter(s->“Lambdas”.equals(s))
.findFirst()
.ifPresent(this::toLowerCase);
}
私有字符串toLowerCase(字符串str){
return str.toLowerCase();
}

但是我得到了一个不兼容的类型错误。

可选。ifPresent
接受
使用者
,并且不返回任何值。使用
映射

String str =
    features.stream()
            .filter(s -> "Lambdas".equals(s))
            .findFirst()
            .map(this::toLowerCase)
            .orElse(null); // default value or orElseThrow
或者,正如Holger所建议的,您可以将
映射
步骤移动到流管道中:

String str =
    features.stream()
            .filter(s -> "Lambdas".equals(s))
            .map(this::toLowerCase)
            .findFirst()
            .orElse(null); // default value or orElseThrow
findFirst
返回一个
Optional
,因此在该
Optional
上使用一些方法,比如
orElse
,它将返回一些字符串实例


仔细查看
可选::ifPresent
作为输入的内容-它是
消费者
,因此将其理解为“将该字符串作为输入,对其执行某些操作,但不返回任何内容”。

如果找到
或LSE
则可以将该字符串映射到它:

List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
String str = features
        .stream()
        .filter(s -> "Lambdas".equals(s))
        .findFirst()
        .map(String::toLowerCase)
        .orElse(null);
List features=Arrays.asList(“Lambdas”、“默认方法”、“流API”、“日期和时间API”);
字符串str=特征
.stream()
.filter(s->“Lambdas”.equals(s))
.findFirst()
.map(字符串::toLowerCase)
.orElse(空);

不要使用
ifPresent
。它是空的。使用
map
后接
get
orElse
orElseGet
,…功能列表-)作为我喜欢的
s->s.equals(“Lambdas”)
的旁白。如果坚持使用,还可以使用方法引用:
“Lambdas”::equals
。是否明确希望为此使用
流API
?它还可以通过利用
features.contains()
方法来实现。如果此条件的计算结果为
true
,则只需返回
“Lambdas”
字符串的小写值……并在流链中使用
map
,即
.filter(s->“Lambdas.equals(s)).map(this::toLowerCase).findFirst()…
List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
String str = features
        .stream()
        .filter(s -> "Lambdas".equals(s))
        .findFirst()
        .map(String::toLowerCase)
        .orElse(null);