マッチングアプリ(Java)

4つのファイルで構成されています。
```:Main
public class Main {
    public static void main(String[] args) {
        // ユーザーの作成
        User user1 = new User();
        user1.setId("1");
        user1.setName("Taro");
        user1.setAge(25);

        User user2 = new User();
        user2.setId("2");
        user2.setName("Hanako");
        user2.setAge(24);

        User user3 = new User();
        user3.setId("3");
        user3.setName("Jiro");
        user3.setAge(27);

        // マッチングサービスの初期化
        MatchingService matchingService = new MatchingService();
        matchingService.addUser(user1);
        matchingService.addUser(user2);
        matchingService.addUser(user3); // user3をマッチングサービスに追加

        // マッチングのテスト
        System.out.println("User1's matches:");
        for (User matchedUser : matchingService.findMatches(user1)) {
            System.out.println(matchedUser.getName());
        }

        // マッチングのテスト for user3
        System.out.println("User3's matches:");
        for (User matchedUser : matchingService.findMatches(user3)) {
            System.out.println(matchedUser.getName());
        }

        // メッセージサービスの初期化
        MessageService messageService = new MessageService();
        // user1からuser2へメッセージを送信
        messageService.sendMessage(user1.getId(), user2.getId(), "Hello, Hanako!");
        // user3からマッチングしたユーザーへメッセージを送信（ここでは例としてuser1がマッチングしたと仮定）
        messageService.sendMessage(user3.getId(), user1.getId(), "Hello, Taro!");

        // メッセージの表示 for Hanako
        System.out.println("Messages for Hanako:");
        for (String message : messageService.getMessages(user2.getId())) {
            System.out.println(message);
        }

        // メッセージの表示 for Taro
        System.out.println("Messages for Taro:");
        for (String message : messageService.getMessages(user1.getId())) {
            System.out.println(message);
        }
    }
}
```

これが１つ目、Mainファイルです。次が二つ目MatchingServiceファイルです。

```:MatchingService
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

public class MatchingService {
    private List<User> users;

    public MatchingService() {
        this.users = new ArrayList<>();
    }

    public void addUser(User user) {
        users.add(user);
    }

    public List<User> findMatches(User currentUser) {
        List<User> potentialMatches = new ArrayList<>(users); // 全ユーザーのコピーを作成
        Collections.shuffle(potentialMatches); // リストをランダムにシャッフル
        potentialMatches.removeIf(user -> user.getId().equals(currentUser.getId())); // 自分自身を除外

        // ここで、必要に応じてマッチングロジックをさらに調整できます

        return potentialMatches;
    }
}
```

3つ目がMessageServiceファイルです。

```:MessageService
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;

public class MessageService {
    private Map<String, List<String>> messages; // ユーザーIDとメッセージのリスト

    public MessageService() {
        this.messages = new HashMap<>();
    }

    public void sendMessage(String senderId, String receiverId, String message) {
        messages.computeIfAbsent(receiverId, k -> new ArrayList<>()).add(message);
    }

    public List<String> getMessages(String userId) {
        return messages.getOrDefault(userId, new ArrayList<>());
    }
}
```

そして最後がUserファイルです。

```:User
// ユーザークラスはそのままで問題ありません。
class User {
    private String id;
    private String name;
    private int age;

    // GetterとSetter
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}
```

以上の４つのファイルを拡張子.javaでつくりファイル名とpublic class クラス名を一致させてください。VScodeなどの開発環境であれば、ターミナルを開きます。そしてターミナル上で
```
javac Main.java MatchingService.java MessageService.java User.java
```
を実行しコンパイルします。それが終わったら、
```
java Main
```
で実行します。