package ru.job4j.bank;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * Класс для описания банковской системы.
 * @author vkovrov
 * @version 0.1
 * @since 0.1
 */
public class BankSystem {

    /**
     * Поле для хранения карты пар пользователь - список аккаунтов.
     */
    private Map<User, List<Account>> users;

    /**
     * Конструктор класса.
     * @param users карта пар пользователь - список аккаунтов
     */
    public BankSystem(Map<User, List<Account>> users) {
        this.users = users;
    }

    /**
     * Метод для добавления пользователя в систему.
     * @param user новый пользователь.
     */
    public void addUser(User user) {
        if (users != null) {
            this.users.putIfAbsent(user, new ArrayList<>());
        }

    }

    /**
     * Метод для удаления пользователя из системы.
     * @param user удаляемый пользователь.
     */
    public void deleteUser(User user) {
        if (user != null && users.containsKey(user)) {
            users.remove(user);
        }
    }

    /**
     * Метод для добавления аккаунта пользователю системы.
     * @param user пользователь системы.
     * @param account новый аккаунт.
     */
    public void addAccountToUser(User user, Account account) {
        if (user != null && users.containsKey(user) && account != null) {
            users.get(user).add(account);
        }
    }

    /**
     * Метод для удаления аккаунта пользователя системы.
     * @param user пользователь системы.
     * @param account удаляемый аккаунт.
     */
    public void deleteAccountFromUser(User user, Account account) {
        if (user != null && users.containsKey(user) && account != null && users.get(user).contains(account)) {
            users.get(user).remove(account);
        }
    }

    /**
     * Метод для получения аккаунтов пользователя.
     * @param user пользователь системы.
     * @return список аккаунтов пользователя.
     */
    public List<Account> getUserAccounts(User user) {
        List<Account> accounts = null;
        if (user != null && users.containsKey(user)) {
            accounts = users.get(user);
        }
        return accounts;
    }

    /**
     * Метод для перевода денег.
     * @param srcUser пользователь, который переводит деньги.
     * @param srcAccount акаунт, с которого пользователь переводит деньги.
     * @param dstUser пользователь, которому переводят деньги.
     * @param dstAccount аккаунт, на который пользователь получает деньги.
     * @param amount сумма перевода.
     * @return выполнилась ли операция перевода.
     */
    public boolean transferMoney(
            User srcUser, Account srcAccount, User dstUser, Account dstAccount, double amount) {
        boolean transferSuccess = false;
        if (users.containsKey(srcUser) && users.containsKey(dstUser)
                && users.get(srcUser).contains(srcAccount) && users.get(dstUser).contains(dstAccount)) {
            transferSuccess = srcAccount.transferAmount(dstAccount, amount);
        }
        return transferSuccess;
    }


}

@@ -41,24 +41,54 @@
 .ArrayList;%0A
+import java.util.Collections;%0A
 import java.
@@ -94,24 +94,24 @@
 .util.List;%0A
-
 import java.
@@ -720,37 +720,8 @@
 ) %7B%0A
-        if (users != null) %7B%0A
     
@@ -781,19 +781,8 @@
 ));%0A
-        %7D%0A%0A
     
@@ -938,63 +938,8 @@
 ) %7B%0A
-        if (user != null && users.containsKey(user)) %7B%0A
     
@@ -962,34 +962,24 @@
 move(user);%0A
-        %7D%0A
     %7D%0A%0A    /
@@ -1201,62 +1201,78 @@
     
-if (user != null && users.containsKey(user) && 
+    List%3CAccount%3E accounts = users.get(user);%0A            if (
 account
+s
  != 
@@ -1291,31 +1291,28 @@
         
-users.get(user)
+    accounts
 .add(acc
@@ -1310,32 +1310,36 @@
 s.add(account);%0A
+    
         %7D%0A    %7D%0A
@@ -1574,107 +1574,78 @@
     
-if (user != null && users.
+List%3CAc
 co
+u
 nt
-ainsKey(user) && account != null && users.get(user).contains(account)
+%3E accounts = users.get(user);%0A        if (accounts != null
 ) %7B%0A
@@ -1656,31 +1656,24 @@
         
-users.get(user)
+accounts
 .remove(
@@ -1919,167 +1919,64 @@
     
-List%3CAccount%3E accounts = null;%0A        if (user != null && users.containsKey(user)) %7B%0A            accounts = users.get(user);%0A        %7D%0A        return accounts
+return users.getOrDefault(user, Collections.emptyList())
 ;%0A  
@@ -2574,59 +2574,109 @@
     
-if (users.
+List%3CAccount%3E srcUserAc
 co
+u
 nt
-ainsKey(srcUser) && users.
+s = users.get(srcUser);%0A        List%3CAccount%3E dstUserAc
 co
+u
 nt
-ainsKey
+s = users.get
 (dst
@@ -2680,16 +2680,17 @@
 dstUser)
+;
 %0A       
@@ -2694,37 +2694,97 @@
     
-        && users.get(srcUser)
+if (srcUserAccounts != null && dstUserAccounts != null) %7B%0A            if (srcUserAccounts
 .con
@@ -2804,34 +2804,31 @@
 unt) && 
-users.get(dstUser)
+dstUserAccounts
 .contain
@@ -2840,24 +2840,28 @@
 Account)) %7B%0A
+    
             
@@ -2921,24 +2921,38 @@
 t, amount);%0A
+            %7D%0A
         %7D%0A  

fix task - Тестовое задание [#10038]