Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import lombok.AllArgsConstructor;
- import lombok.Data;
- import java.util.*;
- public class Debug{
- public static void main(String[] args) throws Exception {
- GameGroup skyWars = new GameGroup("skyWars");
- GameGroup bedWars = new GameGroup("bedWars");
- List<PlayGame> playGames = new ArrayList<>();
- playGames.add(new PlayGame(new Party(1), skyWars, Arrays.asList("karta1", "karta2")));
- playGames.add(new PlayGame(new Party(2), bedWars, null));
- playGames.add(new PlayGame(new Party(3), skyWars, null));
- playGames.add(new PlayGame(new Party(4), skyWars, Arrays.asList("karta1")));
- playGames.add(new PlayGame(new Party(5), bedWars, null));
- playGames.add(new PlayGame(new Party(6), bedWars, Arrays.asList("karta1")));
- playGames.add(new PlayGame(new Party(7), skyWars, null));
- List<Session> sessions = new ArrayList<>();
- // идем по очереди и создаем сессию на каждую GameGroup+карту, которые есть в очереди
- for(PlayGame playGame : playGames){
- List<String> maps = playGame.getMapNames();
- if(maps == null){
- Session session = sessions.stream()
- .filter(it -> it.getGameGroup().equals(playGame.getGameGroup()))
- .findFirst().orElse(null);
- if(session == null){
- sessions.add(new Session(playGame.getGameGroup(), null));
- }
- } else {
- for(String map : maps){
- Session session = sessions.stream()
- .filter(it -> it.getGameGroup().equals(playGame.getGameGroup()))
- .filter(it -> Objects.equals(it.getMapName(), map))
- .findFirst().orElse(null);
- if(session == null){
- sessions.add(new Session(playGame.getGameGroup(), map));
- }
- }
- }
- }
- for(PlayGame playGame : playGames){
- for(Session session : sessions){
- if(session.getGameGroup().equals(playGame.getGameGroup())){
- if(playGame.getMapNames() == null){
- // если искомая карта - любая, то добавляем во все сессии с таким же GameGroup
- session.getPlayGames().add(playGame);
- } else if (playGame.getMapNames().contains(session.getMapName())) {
- // в противном случае добавляем только в те сессии, где такая же карта
- session.getPlayGames().add(playGame);
- }
- }
- }
- }
- for(Session session : sessions){
- System.out.println("session: " + session.getGameGroup() + " with map " + session.getMapName() + ": ");
- for(PlayGame playGame : session.getPlayGames()){
- System.out.println(" playGame: " + playGame);
- }
- }
- }
- @Data
- @AllArgsConstructor
- public static class Party {
- private int id;
- }
- @Data
- @AllArgsConstructor
- public static class GameGroup {
- private String name;
- }
- @Data
- @AllArgsConstructor
- public static class PlayGame {
- private Party party;
- private GameGroup gameGroup;
- private List<String> mapNames;
- }
- @Data
- public static class Session {
- private GameGroup gameGroup;
- private String mapName;
- private Set<PlayGame> playGames = new HashSet<>();
- public Session(GameGroup gameGroup, String mapName){
- this.gameGroup = gameGroup;
- this.mapName = mapName;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement