2016-03-24 16 views
-1

Aşağıdaki kodu vardır:zincirleme lambda akımı ile çağırır ve isteğe bağlı

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

yöntem List<User> türü iade findAllByClient. harita yöntemi, Optional<Object> değerini döndürür. Durumumda (isteğe bağlı) bir Optional<List<User>> döndürülebilir. Kodlamak istediğim fikir, bu isteğe bağlı listede bir akış kullanmaktır. Aramalarımı zincirlemek istiyorum. Java 8 tarzı kod iyi görünümlü ve daha az kod satırı.

Gerçekten varsa (mevcut) bu List<User> işlemek gerekir. Çağrılarımı java8 api ile nasıl zincirleyebilirim: İsteğe Bağlı ve Akışı karıştırmak istiyorum.

Teşekkürler.

DÜZENLEME: Sen tüm süreci var

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

})); 

:

Ben biraz daha ileri devam ediyor. Ancak bu, listeyi doldurup son olarak iade etmek istiyorum.

EDIT2:

bütün sarma yöntemi: JAVA8 İÇİNDE İşte cevabı ancak DEĞİL

/** 
    * 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); 
    } 
+0

Ben sorunuzun fikrim var, ama emin değilim.:. 'userService.getUserWithAuthorityByLogin (principal.getName()) .flatMap (kullanıcı> userRepository.findAllByClient (user.getClient() getId()) akışı foreach (her kullanıcı için ); ' – Aliaxander

+0

tamam ben asıl gönderiyi düzenliyorum –

+0

@FrancoisF Aradığına inanıyorum, 'userService.getUserWithAuthorityByLogin (principal.getName()) .map (user-> userRepository .findAllByClient (user.getClient(). getId()). stream().) .map (kullanıcı-> ManagedUserDTO :: new) .collect (Collectors.toList()) ' –

cevap

0

denemek Can: Ben Java8 cevabını istiyorum. Kopyaladığımda/yapıştırdığımda ?'u görüyorum. Bu yardımcı olmalı.

+0

Çalışıyor! Bu daha zarif bir kod! Çabalarınız için çok teşekkür ederim. Madalyayı kazanırsın :) –

+0

@ FrançoisF. İlk lambda yazım olduğu için yardım ettiğine inanıyorum, inanıyorum. –

0

. yorum bölümünde biri olarak

userService.getUserWithAuthorityByLogin(principal.getName()).map(user->userRepository.findAllByClient(user.getClient().getId()).stream().map(ManagedUserDTO::new).collect(Collectors.toList())).get(); 

aynı, ama bu bazı kodlama sorunları vardır düşünüyorum:

/** 
    * 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); 

    }