O principal problema de design que eu vejo é isso
Transaction by AMY
Para chegar ao seu problema, você também precisará de uma variável para economizar a quantia de dinheiro que uma pessoa possui.
Foo estava nessa transação, deveria colocar Transaction entre AMY e FOO, para tirar isso, você precisa remover a Transaction da classe Person, talvez dando uma ID para cada Person e toda vez que você fizer uma nova Transaction it poderia ser assim:
Transaction(Sender, Receiver, Amount)
t = new Transaction(4, 2, 500); //Person with ID 4 transfers 500 to Person with ID 2
transactions.push(t);
Para tornar as coisas mais simples, você deve ter um campo de dinheiro na sua classe Person. Não tenho muita certeza do que você quer dizer com:
Create a group and put users in that group and then when a group is mentioned then distribute money equally among them
Mas, para minha compreensão, você quer que um grupo divida seu dinheiro da seguinte forma:
P1 has $500
P2 has $400
P3 has $300
E você quer fazer P1 transferir $ 100 para P3, a fim de distribuir o dinheiro igualmente (é isso que eu entendo). para isso, você precisa obter a média (nesse caso 400) e fazer um loop sobre todos acima da média e transferir o dinheiro para baixo.
Aqui está outro caso:
P1 has $8
P2 has $7
P3 has $4
P4 has $1
Neste caso, a média é de $ 5, então P1 precisa ser transferido para P4, mas ele só pode transferir $ 3 para chegar à média, então ele transfere $ 3 para P4. Agora parece assim:
P1 has $5
P2 has $7
P3 has $4
P4 has $4
Agora, desde que P1 passou por P2 ($ 7) transferências para P4, mas apenas $ 1 para alcançar a média de $ 5, e como P2 tem $ 6, chegamos ao P3 e transferimos $ 1. Então as transações foram assim:
P1 transferred to P4 $3
P2 transferred to P4 $1
P2 transferred to P3 $1
Espero que isso ajude você!