Java 获取第一个元素并在应用函数后返回
我是Java8新手,我想创建一个方法,在应用函数后获取匹配的第一个元素并返回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 ->
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);