将lambda转换为方法引用

时间:2017-10-23 08:28:15

标签: java java-8

我有一个小工具列表。

List<String> gadgets = new ArrayList<>(); 

gadgets.add("SmartPhone"); 
gadgets.add("SmartWatch");
gadgets.add("SmartTV"); 
gadgets.add("SmartDoor"); 
gadgets.add("iPhone");

我想将下面的代码转换为方法引用,现在它由lambda表达式组成。请告知我如何将其转换为方法参考

String myItem = gadgets.stream()
                       .peek(s -> System.out.println("processing: " + s)) 
                       .filter(s -> s.length() > 8)
                       .findFirst()
                       .orElse(""); 

System.out.println("result: " + myItem);

2 个答案:

答案 0 :(得分:4)

您必须将代码移动到方法中:

private void accept(String s) {
    System.out.println("processing: " + s);
}

private boolean test(String s) {
    return s.length() > 8;
}

然后:

String myItem = gadgets
        .stream()
        .peek(YourClass::accept)
        .filter(YourClass::test)
        .findFirst()
        .orElse("");

在这种情况下,我建议坚持使用lambda。只需像上面那样格式化代码,lambda就是可读的。

答案 1 :(得分:0)

你可以在这里,因为你有其他逻辑,如"processing: " + s> 8。如果您要将其删除 - 可以将其更改为:.peek(System.out::println)

另一种方法是将逻辑包装到单独的方法中,例如:

public boolean isLengthMoreThan8(String s){
return s.length > 8
}

并使用方法参考:

.filter(this::isLengthMoreThan8)...