Как преобразовать этот лямбда-код Java в эквивалент Groovy - PullRequest
0 голосов
/ 26 января 2019

У меня есть метод, который работает, но мне нужно преобразовать его, чтобы использовать Groovy, так как базовая база кода - это отличный код.Я также считаю, что это можно сделать более кратко, используя Groovy, но я лучше использую лямбды, поэтому я попробовал это сначала, но я изо всех сил пытаюсь добиться того же с Groovy.Я был бы очень признателен, если бы кто-то мог помочь с этим.

Вот код:

 public ArrayList<GameCredits> getCreditsList(CreditGained 
                                           creditsAccumulated, 
     Players playerList) {
    List<GameCredits> credits = creditsAccumulated.credits
    List<GameCredit> newCredits = []
    boolean playerMatched
    //Match Players to their credits and create new credits for unmatched
    playerList.players.stream()
            .filter { Player player -> player.playerKey != null }
            .each { Player player ->
                 playerMatched = false
                 credits.stream()
                .filter { GameCredit credit -> (credit?.creditIdentifier && 

                      credit?.creditIdentifier.equals(player.playerKey)) }

            .each { GameCredit credit ->
               credit.rank = player.rank
               credit.playerEmail = player.emailAddress
               credit.firstName = player.firstName
               credit.lastName = player.lastName
               playerMatched = true
        }
        if(!playerMatched){
              GameCredit credit=new GameCredit()
              credit.rank = player.rank
              credit.playerEmail = player.emailAddress
              credit.firstName = player.firstName
              credit.lastName = player.lastName
              newcredits.push(newGameCredits)
        }
    }
    credits.addAll(newCredits)
    credits
}

Вот то, что я пытался, но я знаю, что будет лучший способ.

public ArrayList<GameCredits> getCreditsList(CreditGained creditsAccumulated, 
     Players playerList) {
    List<GameCredits> credits = creditsAccumulated.credits
    List<GameCredit> newCredits = []
    boolean playerMatched
    //Match Players to their credits and create new credits for unmatched
    playerList.players.findAll
             { Player player -> player.playerKey != null }
            .each { Player player ->
                 playerMatched = false
                 credits
                .findAll { GameCredit credit -> (credit?.creditIdentifier && 
                 credit?.creditIdentifier.equals(player.playerKey)) }

            .each { GameCredit credit ->
               credit.rank = player.rank
               credit.playerEmail = player.emailAddress
               credit.firstName = player.firstName
               credit.lastName = player.lastName
               playerMatched = true
        }
        if(!playerMatched){
              GameCredit newGameCredits=new GameCredit()
              newGameCredits.rank = player.rank
              newGameCredits.playerEmail = player.emailAddress
              newGameCredits.firstName = player.firstName
              newGameCredits.lastName = player.lastName
              newcredits.push(newGameCredits)
        }
    }
    credits.addAll(newCredits)
    credits
}

Спасибо

1 Ответ

0 голосов
/ 27 января 2019

Вот мое мнение (я убрал побочный эффект на CreditGained):

List<GameCredits> collectCredits(CreditGained credits, Players players) {
  credits.credits + players.players.collectMany { Player player ->
    if (!player.playerKey) {
      Collections.emptyList() // quick exit for player without key
    } else {
      List<GameCredit> matches = player.credits.findAll {
        it?.creditIdentifier == player.playerKey
      }

      if (matches) {
        // return credit(s) matched to player (with updated metadata)
        matches.each { GameCredit credit ->
          credit.with {
            rank = player.rank
            lastName = player.lastName
            firstName = player.firstName
            playerEmail = player.emailAddress
          }
        }
      } else {
        // return 1 new credit for player
        new GameCredit(
          rank: player.rank,
          lastName: player.lastName,
          firstName: player.firstName,
          playerEmail: player.emailAddress,
          creditIdentifier: player.playerKey // guessing you want this too...
        )
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...