相关疑难解决方法(0)

怎么做功能组合?

虽然不耐烦地等待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中实现这一点?

java java-8

33
推荐指数
2
解决办法
1万
查看次数

Java 8 lambda谓词链接?

我无法编译它,甚至可以链接谓词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 lambda java-8

32
推荐指数
4
解决办法
3万
查看次数

链接lambda函数

当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)

java lambda java-8 java-stream

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×3

java-8 ×3

lambda ×2

java-stream ×1