虽然不耐烦地等待Java 8发布,在阅读Brian Goetz的精彩"Lambda状态"文章之后,我注意到功能组合根本没有被覆盖.
根据上面的文章,在Java 8中应该可以:
// having classes Address and Person
public class Address {
private String country;
public String getCountry() {
return country;
}
}
public class Person {
private Address address;
public Address getAddress() {
return address;
}
}
// we should be able to reference their methods like
Function<Person, Address> personToAddress = Person::getAddress;
Function<Address, String> addressToCountry = Address::getCountry;
Run Code Online (Sandbox Code Playgroud)
现在,如果我想将这两个函数组合成一个函数映射Person到country,我怎样才能在Java 8中实现这一点?
我无法编译它,甚至可以链接谓词lambdas?
Arrays.asList("1","2","3").stream().filter( (e -> e=="1" ).or(e-> e=="2") ).count();
Run Code Online (Sandbox Code Playgroud)
或者唯一的方法是显式创建一个谓词,然后像这样组合:
Predicate<String> isOne= e -> e=="1";
Arrays.asList("1","2","3").stream().filter( isOne.or(e -> e=="2") ).count();
Run Code Online (Sandbox Code Playgroud)
或者是否有更多"功能优雅"的方式来实现同样的目标?
当Java方法接受a时Function<? super T, ? extends U>,可以使用如下语法提供方法引用:MyClass::myMethod.
但是,我想知道是否有一种链接多个方法调用的方法.这是一个说明案例的例子.
// on a specific object, without lambda
myString.trim().toUpperCase()
Run Code Online (Sandbox Code Playgroud)
我想知道是否有语法将其转换为lambda表达式.我希望有类似的东西:
// something like: (which doesn't work)
String::trim::toUpperCase
Run Code Online (Sandbox Code Playgroud)
或者,是否有一个实用程序类来合并函数?
// example: (which does not exist)
FunctionUtil.chain(String::trim, String::toUpperCase);
Run Code Online (Sandbox Code Playgroud)