我有一个小工具列表。
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);
答案 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)...