Есть класс Game, объекты класса инициализируются в конструкторе и сразу добавляются в общий ArrayList. Так же в классе есть синхронизированный по листу геттер.
public class Game {
    private String teamOne;
    private String teamTwo;
    private String link;
    private String id;

    public Game(String teamOne, String teamTwo, String link, String id) {
        this.teamOne = teamOne.toLowerCase();
        this.teamTwo = teamTwo.toLowerCase();
        this.link = link;
        this.id= id;
    }

   public boolean equals(Game obj) {
        if (this.id.equals(obj.id)) return false;

        if (this.teamOne.equals(obj.teamOne) || this.teamOne.equals(obj.teamTwo)) return true;
        return this.teamTwo.equals(obj.teamOne) || this.teamTwo.equals(obj.teamTwo);
    }
    }
Механика такая. В этот класс поступают новые объекты из разных источников. Источники запущены в цикле, каждый в своём потоке, и подгружают новые объекты, пока программа запущена. Метод должен брать новый объект, сравнивать объекты по equals() и группировать их. Далее определить элемент в какую-то группу эквивалентных элементов. Если такой группы нет, то создавать её. 1. Как инициализировать метод при создании каждого нового объекта? 2. Как синхронизировать создание объектов, чтобы в метод точно прошли все объекты по очереди? 3. Что лучше использовать для единого хранения групп объектов и для хранения объекта в группе? 4. Как написать этот метод и какова механика его работы? 5. Может быть надо написать группу методов? Если да, то какие.