在Java中使用flatMap时是否可以使用组合函数?

时间:2018-04-11 08:19:39

标签: java functional-programming

我有这段代码:

userRepo.findAll().stream()
    .map(u -> {
        u.setName(name);
        return u;
    })
    .flatMap(u -> {
        return employeeRepo.findById(u.getId());
    }, //???)

//???中,我需要一个组合函数来同时获取用户和员工。我知道如何在RxJava中实现它,而不是在普通的Java中。这可能吗?

2 个答案:

答案 0 :(得分:1)

也许你可以使用类似的东西:

Map<User, Employee> userEmployee = userRepo.findAll().stream()
    .map(u -> {
        u.setName(name);
        return u;
    })
    .collect(Collectors.toMap(
      u -> u,
      u -> employeeRepo.findById(u.getId())
    ))

这将创建一个地图,其中User为关键字,Employee为值。

答案 1 :(得分:1)

最有效的方法是使用scala desugars for comprehension:嵌套flatMap和最深嵌套中的map

userRepo.findAll().stream()
    .flatMap(u -> {
        u.setName(name); //I don't like this line
        return employeeRepo.findById(u.getId()).map(e->{
            return new Pair(u,e);
        });
    });

假设有一个班级Pair