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

lab10-solution

parent a7b1e813
Branches
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;
public Match(Player player1, int player1Scorel, Player player2, int player2Scorel) {
......@@ -22,7 +29,7 @@ public class Match {
}
throw new IllegalArgumentException("Player is not participant of this match.");
}
public Oponents getOponents() {
return oponents;
}
......@@ -34,6 +41,10 @@ public class Match {
public int getPlayer2Scorel() {
return player2Scorel;
}
public int getTotalScore() {
return getPlayer1Scorel() + getPlayer2Scorel();
}
@Override
public String toString() {
......
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;
......
package cz.jezek.lab11;
import static java.util.Comparator.comparingInt;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Optional;
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.JAXBException;
import jakarta.xml.bind.Marshaller;
public class StreamMain {
public static void main(String[] args) {
Tournament tournament = Tournament.generate();
Tournament tournament = loadTournament();
if (tournament == null) {
tournament = Tournament.generate();
}
printStatAboutTournament(tournament);
saveTournament(tournament);
loadTournament();
}
}
public static void printStatAboutTournament(Tournament tournament) {
System.out.println(tournament);
......@@ -18,9 +39,15 @@ 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)
System.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)
System.out.println(tournament.getMatches().stream()
.filter(m -> m.getOponents().contains(player))
.mapToInt( m -> m.getScoreForPlayer(player))
.sum());
Oponents oponents = new Oponents(tournament.getRandomPlayer(),
tournament.getRandomPlayer());
......@@ -28,17 +55,42 @@ public class StreamMain {
System.out.print("Matches: ");
//TODO 4.a List the matches played between the given players (using the stream)
tournament.getMatches().stream().filter(m -> m.getOponents().equals(oponents)).forEach(System.out::println);
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:");
//TODO 4.c Show match with the largest total number (sum of both players) scored goals between relevant players (help Streams)
Optional<Match> maxMatch =
tournament.getMatches()
.stream()
.filter(m -> m.getOponents().equals(oponents))
//.reduce((a,b) -> a.getPlayer1Scorel() + a.getPlayer2Scorel() < b.getPlayer1Scorel() + b.getPlayer2Scorel() ? b : a);
.max(comparingInt(Match::getTotalScore));
System.out.println(maxMatch.map(Object::toString).orElse("N/A"));
}
public static void loadTournament() {
//TODO 5.b Load a serialized tournament from a file
public static Tournament loadTournament() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("tournament.obj"))) {
return (Tournament) ois.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.RandomGenarator.selectRandom;
import java.io.Serializable;
import java.util.List;
import java.util.Random;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Tournament {
public class Tournament implements Serializable{
private static final long serialVersionUID = 0L;
private List<Player> players;
private List<Match> matches;
private String name = "turnaj";
private static Random rnd = new Random();
public static Match generateRandomMatch(List<Player> player) {
return new Match(selectRandom(player), rnd.nextInt(11), selectRandom(player), rnd.nextInt(11));
}
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();
List<Player> players =
Stream.generate(Player::generateRandom)
.distinct()
.limit(10)
.collect(Collectors.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(250)
.collect(Collectors.toList());
return new Tournament(players, matches);
}
public Tournament() {
}
public Tournament(List<Player> players, List<Match> matches) {
this.players = players;
this.matches = matches;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public List<Player> getPlayers() {
return players;
......@@ -45,11 +84,11 @@ 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(Collectors.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(Collectors.joining("\n")));
return builder.toString();
}
......
module cz.jezek.lab10 {
requires transitive javafx.controls;
requires javafx.fxml;
opens cz.jezek.lab11 to javafx.fxml;
requires jakarta.xml.bind;
opens cz.jezek.lab11;
exports cz.jezek.lab11;
}
\ No newline at end of file
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