snippetjavaMinor
Find existing player to update or create new one
Viewed 0 times
updatenewcreateplayeronefindexisting
Problem
I'm making a game in Java 7, and I have this block of logic when handling an update from the server.
The client has a list of players, and gets a player object from the server. If the client already has that player (one with the same id), it updates that existing one, otherwise it creates a new one.
This code looks ugly though. The
Sidenote:
public void handleNewPlayer(Player newPlayer, Player[] otherPlayers) {
boolean done = false;
for (Player otherPlayer : otherPlayers) {
if (newPlayer.id == otherPlayer.id) {
updatePlayer(otherPlayer);
done = true;
break;
}
}
if (!done) {
createPlayer(newPlayer);
}
}The client has a list of players, and gets a player object from the server. If the client already has that player (one with the same id), it updates that existing one, otherwise it creates a new one.
This code looks ugly though. The
done flag is really getting under my skin. Is there a better way to organize this to avoid that? Are there any other problems with this code?Sidenote:
createPlayer() and updatePlayer() do very different things, and need to be seperate methods.Solution
A very quick review for the code, and assuming Java
def handleNewPlayer(Player newPlayer, Player[] otherPlayers) {
def otherPlayer = otherPlayers.find() { newPlayer.id == otherPlayer.id }
if (otherPlayer) {
updatePlayer otherPlayer
}
else {
createPlayer newPlayer
}
}
Code Snippets
public void handleNewPlayer(Player newPlayer, Player[] otherPlayers) {
for (Player otherPlayer : otherPlayers) {
if (newPlayer.id == otherPlayer.id) {
updatePlayer(otherPlayer);
return;
}
}
createPlayer(newPlayer);
}public void handleNewPlayer(Player newPlayer, Player[] otherPlayers) {
final Optional<Player> otherPlayer = Arrays.stream(otherPlayers)
.filter((Player p) -> newPlayer.id == p.id)
.findFirst();
if (otherPlayer.isPresent()) {
updatePlayer(otherPlayer.get());
}
else {
createPlayer(newPlayer);
}
}public void handleNewPlayer(Player newPlayer, Player[] otherPlayers) {
final Optional<Player> player = Arrays.stream(otherPlayers)
.filter((Player p) -> newPlayer.id == p.id)
.findFirst()
.orElse(newPlayer);
if (newPlayer == player) {
createPlayer(newPlayer);
}
else {
updatePlayer(player);
}
}Context
StackExchange Code Review Q#107963, answer score: 3
Revisions (0)
No revisions yet.