Java HashMap到组合框

Java HashMap到组合框,java,javafx,combobox,hashmap,Java,Javafx,Combobox,Hashmap,我试图从“teamPlayers”hashmap中获取与“match”对象中的键“i”和“j”相对应的值,这些键将被放入组合框“homebox、homebox 2、awaybox、awaybox 2”。当我尝试向组合框添加四个值时,它只添加最后两个值。不知道是否有人有任何想法,我可以尝试阻止这种情况发生,让它增加更多的价值比两个它现在添加。谢谢各位 public void generateMatches (String homeTeam, String awayTeam){ bo

我试图从“teamPlayers”hashmap中获取与“match”对象中的键“i”和“j”相对应的值,这些键将被放入组合框“homebox、homebox 2、awaybox、awaybox 2”。当我尝试向组合框添加四个值时,它只添加最后两个值。不知道是否有人有任何想法,我可以尝试阻止这种情况发生,让它增加更多的价值比两个它现在添加。谢谢各位

public void generateMatches (String homeTeam, String awayTeam){
        boolean bool = false;
        int x = 0;
        arrayLength = teamPlayers.size();

        for (String i : teamPlayers.keySet()){
            for (String j : teamPlayers.keySet()){
                if (teamPlayers.get(i).equals(teamPlayers.get(j)) && !bool){
                    bool = true;
                }else if (bool){
                    Match matches = new Match(i,j);
                    homeTeam = matches.getHomeTeam();
                    awayTeam = matches.getAwayTeam();
                    scoreHomeTeam.getItems().add(matches.getHomeTeam());
                    scoreAwayTeam.getItems().add(matches.getAwayTeam());

                    while(x<teamPlayers.size()){
                        for (Entry<String,String> e : teamPlayers.entrySet()){
                            homeBox.getItems().add(e.getValue());
                            homeBox2.getItems().add(e.getValue());
                            awayBox.getItems().add(e.getValue());
                            awayBox2.getItems().add(e.getValue());
                        }
                        x++;
                    }
                    System.out.println("\nMatch created between "+ homeTeam + " & "+ awayTeam);
                }
            }
            bool = false;
        }

    }
public void generateMatches(字符串homeTeam、字符串awayTeam){
布尔布尔布尔=假;
int x=0;
arrayLength=teamPlayers.size();
for(字符串i:teamPlayers.keySet()){
for(字符串j:teamPlayers.keySet()){
如果(teamPlayers.get(i).equals(teamPlayers.get(j))&&&!bool){
布尔=真;
}否则如果(bool){
匹配=新匹配(i,j);
homeTeam=matches.getHomeTeam();
awayTeam=matches.getAwayTeam();
scoreHomeTeam.getItems().add(matches.getHomeTeam());
scoreAwayTeam.getItems().add(matches.getAwayTeam());

而(x我认为您正在尝试根据
HashMap
中的团队生成匹配

首先,您没有解释teamPlayers
HashMap
的结构,但我相信您的问题在于如何使用
HashMap
存储您的玩家。
您将它们存储为{TeamName=PlayerName}组合,但与任何
Map
一样,键必须是唯一的
因此,在初始化
地图时,您可能正在丢弃玩家:

Map<String, String> teamPlayers = new HashMap<String, String>();
teamPlayers.put("Team 1", "Player 1");
teamPlayers.put("Team 1", "Player 2");    // --> overwrites Player 2
teamPlayers.put("Team 2", "Player 3");
teamPlayers.put("Team 2", "Player 4");    // --> overwrites Player 3 
System.out.println(teamPlayers);
打印出来

{第一队=[球员1,球员2],第二队=[球员3,球员4]}


其次,如果您想在teamPlayers
Map
中使用团队组合生成匹配,则需要采用不同的方法。 最好将所有东西分开:

  • 初始化分组在
    列表中的玩家
  • 初始化可能的匹配组合
  • 为某个匹配组合初始化GUI
    ComboBox
  • 一个可运行的示例类可以帮助您完成以下任务

    public class MatchFixer {
    
        private Map<String, List<String>> teamPlayers;
    
        public MatchFixer() {
            teamPlayers = new HashMap<String, List<String>>();
            teamPlayers.put("Team 1", Arrays.asList(new String[] { "Player 1_1", "Player 1_2" }));
            teamPlayers.put("Team 2", Arrays.asList(new String[] { "Player 2_1", "Player 2_2" }));
            teamPlayers.put("Team 3", Arrays.asList(new String[] { "Player 3_1", "Player 3_2" }));
        }
    
        public List<Match> generateMatches(){
            List<Match> matches = new ArrayList<Match>();
            for (String homeTeam : teamPlayers.keySet()){
                for (String awayTeam : teamPlayers.keySet()){
                    if (!homeTeam.equals(awayTeam)){
                        Match match = new Match(homeTeam, awayTeam);
                        matches.add(match);
                        System.out.println("\tMatch created between "+ homeTeam + " & "+ awayTeam);
                    }
                }
            }
            return matches;
        }
    
        public void initMatch(Match match){
            String homeTeam = match.getHomeTeam();
            String awayTeam = match.getAwayTeam();
    
            List<String> homePlayers = teamPlayers.get(homeTeam);
            List<String> awayPlayers = teamPlayers.get(awayTeam);
    
            scoreHomeTeam.getItems().add(homeTeam);
            scoreAwayTeam.getItems().add(awayTeam);
    
            homeBox.getItems().addAll(homePlayers);
            homeBox2.getItems().addAll(homePlayers);
            awayBox.getItems().addAll(awayPlayers);
            awayBox2.getItems().addAll(awayPlayers);
    
            System.out.println("\tMatch initialized between "+ homeTeam + " -> "+ homePlayers +" & "+ awayTeam +" -> "+ awayPlayers);
        }
    
        public static void main(String[] args) {
            MatchFixer fixer = new MatchFixer();
    
            // Initialize matches with all the combinations of teams
            System.out.println("Initialize the match combinations:");
            List<Match> matches = fixer.generateMatches();
    
            // Let's initialize the first of our generated matches
            System.out.println("\nInitialize match 1:");
            fixer.initMatch(matches.get(0));
        }
    }
    
    公共类匹配修复程序{
    私人地图团队成员;
    公共匹配修复程序(){
    teamPlayers=newhashmap();
    teamPlayers.put(“team1”,Arrays.asList)(新字符串[]{“player1_1”,“player1_2”});
    teamPlayers.put(“team2”,Arrays.asList)(新字符串[]{“player2_1”,“player2_2”});
    teamPlayers.put(“team3”,Arrays.asList)(新字符串[]{“player3u1”,“player3u2”});
    }
    公共列表生成器匹配(){
    列表匹配项=新的ArrayList();
    for(字符串homeTeam:teamPlayers.keySet()){
    for(字符串awayTeam:teamPlayers.keySet()){
    如果(!homeTeam.equals(awayTeam)){
    比赛=新的比赛(主队,awayTeam);
    匹配。添加(匹配);
    System.out.println(“\t在“+homeTeam+”和“+awayTeam”之间创建的匹配);
    }
    }
    }
    返回比赛;
    }
    公共无效初始匹配(匹配){
    String homeTeam=match.getHomeTeam();
    字符串awayTeam=match.getAwayTeam();
    列出家庭成员=团队成员。获取(家庭成员);
    列出awayPlayers=teamPlayers.get(awayTeam);
    scoreHomeTeam.getItems().add(homeTeam);
    scoreAwayTeam.getItems().add(awayTeam);
    homeBox.getItems().addAll(HomePlayer);
    homeBox2.getItems().addAll(HomePlayer);
    awayBox.getItems().addAll(awayPlayers);
    awayBox2.getItems().addAll(awayPlayers);
    System.out.println(“\t在“+homeTeam+”->“+homePlayers+”&“+awayTeam+”->“+awayPlayers”之间初始化的匹配);
    }
    公共静态void main(字符串[]args){
    MatchFixer fixer=新的MatchFixer();
    //使用所有团队组合初始化匹配
    System.out.println(“初始化匹配组合:”);
    List matches=fixer.generateMatches();
    //让我们初始化生成的第一个匹配项
    System.out.println(“\n初始化匹配1:”;
    initMatch(matches.get(0));
    }
    }
    
    打印出来

    初始化匹配组合:

    团队3和团队1之间创建的匹配
    团队3和团队2之间创建的匹配
    团队1和团队3之间创建的匹配
    团队1和团队2之间创建的匹配
    团队2和团队3之间创建的匹配
    团队2和团队1之间创建的匹配

    初始化匹配1:

    3队->[球员3\u 1,球员3\u 2]和1队->[球员1\u 1,球员1\u 2]之间的比赛已初始化


    我们需要更多的信息来帮助您。例如,您的团队成员地图中有什么?分步骤思考。1.获得主队成员。2.获得客场球员。3.将主队球员添加到客场球员。4.将客场球员添加到客场球员。干得好@George Derpi。我假设
    值是一个
    球员列表
    谢谢你,伙计,我真的很感激!
    public class MatchFixer {
    
        private Map<String, List<String>> teamPlayers;
    
        public MatchFixer() {
            teamPlayers = new HashMap<String, List<String>>();
            teamPlayers.put("Team 1", Arrays.asList(new String[] { "Player 1_1", "Player 1_2" }));
            teamPlayers.put("Team 2", Arrays.asList(new String[] { "Player 2_1", "Player 2_2" }));
            teamPlayers.put("Team 3", Arrays.asList(new String[] { "Player 3_1", "Player 3_2" }));
        }
    
        public List<Match> generateMatches(){
            List<Match> matches = new ArrayList<Match>();
            for (String homeTeam : teamPlayers.keySet()){
                for (String awayTeam : teamPlayers.keySet()){
                    if (!homeTeam.equals(awayTeam)){
                        Match match = new Match(homeTeam, awayTeam);
                        matches.add(match);
                        System.out.println("\tMatch created between "+ homeTeam + " & "+ awayTeam);
                    }
                }
            }
            return matches;
        }
    
        public void initMatch(Match match){
            String homeTeam = match.getHomeTeam();
            String awayTeam = match.getAwayTeam();
    
            List<String> homePlayers = teamPlayers.get(homeTeam);
            List<String> awayPlayers = teamPlayers.get(awayTeam);
    
            scoreHomeTeam.getItems().add(homeTeam);
            scoreAwayTeam.getItems().add(awayTeam);
    
            homeBox.getItems().addAll(homePlayers);
            homeBox2.getItems().addAll(homePlayers);
            awayBox.getItems().addAll(awayPlayers);
            awayBox2.getItems().addAll(awayPlayers);
    
            System.out.println("\tMatch initialized between "+ homeTeam + " -> "+ homePlayers +" & "+ awayTeam +" -> "+ awayPlayers);
        }
    
        public static void main(String[] args) {
            MatchFixer fixer = new MatchFixer();
    
            // Initialize matches with all the combinations of teams
            System.out.println("Initialize the match combinations:");
            List<Match> matches = fixer.generateMatches();
    
            // Let's initialize the first of our generated matches
            System.out.println("\nInitialize match 1:");
            fixer.initMatch(matches.get(0));
        }
    }