链接lambda调用流和可选

时间:2016-03-24 15:26:27

标签: java lambda java-8

我有以下代码:

userService.getUserWithAuthorityByLogin(principal.getName())
                .map(user->userRepository.findAllByClient(user.getClient().getId()));

方法findAllByClient返回List<User>类型。 map方法返回Optional<Object> 在我的情况下,它可以(可选)返回Optional<List<User>>。 我想编码的想法是在此可选列表上使用流。 我想把我的电话联系起来。 java 8样式的代码外观漂亮,代码行少。

如果它真的存在(现在),我需要处理这个List<User>。如何使用java8 api链接我的调用:我希望混合Optional和Stream。

感谢。

编辑:

我继续说道:

userService.getUserWithAuthorityByLogin(principal.getName())
.map(user->userRepository.findAllByClient(user.getClient().getId()).stream().forEach(user-> 
{
    managedUserDTOs.add(new ManagedUserDTO(user));

}));

你已经完成了整个过程。但是这不能在指令

上编译
managedUserDTOs.add(new ManagedUserDTO(user))

我想填写清单并在最后回复。

EDIT2:

整个包装方法:

 /**
     * GET  /users -> get all users.
     */
    @RequestMapping(value = "/user-liste",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    @Transactional(readOnly = true)
    @Secured({AuthoritiesConstants.TC_ADMIN})
    public ResponseEntity<List<ManagedUserDTO>> getUserListe(Principal principal)
        throws URISyntaxException {

        return new ResponseEntity<>(managedUserDTOs, HttpStatus.OK);
    }

2 个答案:

答案 0 :(得分:0)

这里是答案但不是JAVA8。 我想要Java8答案:

/**
     * GET  /users -> get all users.
     */
    @RequestMapping(value = "/user-liste",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
    @Timed
    @Transactional(readOnly = true)
    @Secured({AuthoritiesConstants.TC_ADMIN})
    public ResponseEntity<List<ManagedUserDTO>> getUserListe(Principal principal)
        throws URISyntaxException {


        Optional<User> ouser = userService.getUserWithAuthorityByLogin(principal.getName());
        List<ManagedUserDTO> managedUserDTOs = new ArrayList<>();
        if (ouser.isPresent())
        {
            List<User> userListe = userRepository.findAllByClient(ouser.get().getClient().getId());
            for (User user : userListe)
            {
                managedUserDTOs.add(new ManagedUserDTO(user));
            }
        }

         return new ResponseEntity<>(managedUserDTOs, HttpStatus.OK);

    }

答案 1 :(得分:0)

你可以尝试:

var Greeter = function () {}
Greeter.prototype.greet = function () { };

与评论部分中的相同,但我认为这有一些编码问题。我复制/粘贴时看到userService.getUserWithAuthorityByLogin(principal.getName()).map(user->userRepository.findAllByClient(user.getClient().getId()).stream().map(ManagedUserDTO::new).collect(Collectors.toList())).get(); 。这应该有所帮助。