Skip to content
Snippets Groups Projects
Commit 77f52d0b authored by koz01's avatar koz01
Browse files

solution

parent 03bf36ce
Branches 2023_solution
No related merge requests found
package cz.jezek.lab11;
import java.io.Serializable;
import java.util.Objects;
public class Match {
public class Match implements Serializable{
private static final long serialVersionUID = 1L;
private Oponents oponents;
private int player1Scorel;
private int player2Scorel;
......
package cz.jezek.lab11;
import java.io.Serializable;
import java.util.Objects;
public class Oponents {
public class Oponents implements Serializable{
private static final long serialVersionUID = 1L;
private Player player1;
private Player player2;
......
package cz.jezek.lab11;
public class Player {
import java.io.Serializable;
public class Player implements Serializable{
private static final long serialVersionUID = 1L;
private String firstName;
private String lastName;
public static Player generateRandom() {
......
package cz.jezek.lab11;
import static java.lang.System.out;
import static java.util.stream.Collectors.joining;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
public class StreamMain {
public static void main(String[] args) {
Tournament tournament = Tournament.generate();
Tournament tournament = loadTournament();
printStatAboutTournament(tournament);
saveTournament(tournament);
loadTournament();
}
public static void printStatAboutTournament(Tournament tournament) {
......@@ -18,27 +27,62 @@ public class StreamMain {
System.out.println(player);
System.out.print("Number of matches: ");
//TODO 3.a Show the number of matches played by a given player (using Streams)
//filter
out.println(
tournament.getMatches()
.stream()
.filter(m -> m.getOponents().contains(player))
.count());
System.out.print("Goals scored: ");
//TODO 3.b Show the number of goals scored by a given player (help Streams)
//IntStream <- mapToInt()
//sum
System.out.print(tournament.getMatches()
.stream()
.filter(m -> m.getOponents().contains(player))
.mapToInt( m-> m.getScoreForPlayer(player))
.sum());
Oponents oponents = new Oponents(tournament.getRandomPlayer(),
tournament.getRandomPlayer());
System.out.println("Mutual statistics of oponents:" + oponents);
System.out.print("Matches: ");
System.out.println(tournament.getMatches()
.stream()
.filter(m -> m.getOponents().equals(oponents))
.map(Object::toString)
.collect(joining("\n")));
//TODO 4.a List the matches played between the given players (using the stream)
System.out.print("Number of mathes: ");
//TODO 4.b Print the number of matches played between the given players (using the stream)
System.out.print("Match with the largest total number:");
System.out.println(tournament.getMatches()
.stream()
.filter(m -> m.getOponents().equals(oponents))
.mapToInt(m -> m.getPlayer1Scorel() + m.getPlayer2Scorel())
.max()
.orElse(0));
//TODO 4.c Show match with the largest total number (sum of both players) scored goals between relevant players (help Streams)
}
public static void loadTournament() {
//TODO 5.b Load a serialized tournament from a file
public static Tournament loadTournament() {
try(ObjectInputStream oos = new ObjectInputStream(new FileInputStream("tournament.obj"))) {
return (Tournament) oos.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
public static void saveTournament(Tournament tournament) {
//TODO 5.a Save the tournament to a file using object serialization.
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("tournament.obj"))) {
oos.writeObject(tournament);
} catch (IOException e) {
e.printStackTrace();
}
}
}
package cz.jezek.lab11;
import java.util.Collections;
import static cz.jezek.lab11.RandomGenerator.random;
import static cz.jezek.lab11.RandomGenerator.selectRandom;
import static java.util.stream.Collectors.joining;
import static java.util.stream.Collectors.toList;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Stream;
public class Tournament {
public class Tournament implements Serializable{
private static final long serialVersionUID = 1L;
private List<Player> players;
private List<Match> matches;
public static Tournament generate() {
// TODO 1.a Generate a list of 10 random players using the stream and then filter so that it does not contain players with the same name
List<Player> players = Collections.emptyList();
// TO DO 1.a Generate a list of 10 random players using the stream and then filter so that it does not contain players with the same name
List<Player> players = Stream.generate(Player::generateRandom)
.distinct()
.limit(10)
.collect(toList());
// TODO 1.b Use the stream to generate a list of 50 matches between random players (from the list of players) with a random result. Make sure the player does not play with himself.
List<Match> matches = Collections.emptyList();
List<Match> matches = Stream.generate(() -> generateRandomMatch(players))
.filter(m -> m.getOponents().getPlayer1() != m.getOponents().getPlayer2())
.limit(500)
.toList();
return new Tournament(players, matches);
}
private static Match generateRandomMatch(List<Player> players) {
return new Match(selectRandom(players), random.nextInt(11), selectRandom(players), random.nextInt(11));
}
public Tournament(List<Player> players, List<Match> matches) {
this.players = players;
......@@ -45,11 +63,15 @@ public class Tournament {
builder.append("\n\nPlayers:\n");
// TODO 2.a Use the stream to add a listing of all players to the builder. Individual players are separated by a "\ n" character
builder.append(/* list of all players */"");
builder.append(players.stream()
.map(Object::toString)
.collect(joining("\n")));
builder.append("\n\nMatches:\n");
// TODO 2.b Use the stream to add a listing of all entries to the builder. Individual matches are separated by a "\ n" character
builder.append(/* list of all matches */"");
builder.append(matches.stream()
.map(Object::toString)
.collect(joining("\n")));
return builder.toString();
}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment