Java 使用For循环查找并显示其中一个ArrayList中的特定元素

Java 使用For循环查找并显示其中一个ArrayList中的特定元素,java,arrays,arraylist,Java,Arrays,Arraylist,我需要使用for循环来查找和显示每个列表中的特定玩家,我如何使用for循环来查找Nia Reed,同时假设您不知道Nia玩的是哪项运动。感谢您的帮助 我试着这样做是为了显示来自SoccerNames的Kat Asman,但我不确定在不使用SoccerNames的情况下如何做到这一点 ArrayList<String> nList = new ArrayList<String>(); String findString = "Kat Asman"; fo

我需要使用for循环来查找和显示每个列表中的特定玩家,我如何使用for循环来查找Nia Reed,同时假设您不知道Nia玩的是哪项运动。感谢您的帮助

我试着这样做是为了显示来自SoccerNames的Kat Asman,但我不确定在不使用SoccerNames的情况下如何做到这一点

ArrayList<String> nList = new ArrayList<String>();
     String findString = "Kat Asman";

    for(String s: SoccerNames){
        if(s.contains(findString)){
            nList.add(s);
        }
        System.out.println(nList);
    }  
这是完整的程序

import java.util.ArrayList;
public class ArraysPrep
{

ArrayList<String> FootballNames;
ArrayList<String> VolleyballNames;
ArrayList<String> SoccerNames;
ArrayList<ArrayList<String>> bigArray;

public ArraysPrep()
{
    FootballNames = new ArrayList<>();
    VolleyballNames = new ArrayList<>();
    SoccerNames = new ArrayList<>();
    bigArray = new ArrayList<>();

    fillInNames();
    fillInBigTable();
}

private void fillInNames()
{
    FootballNames.add("Marcus Allen");
    FootballNames.add("Kyle Alston");
    FootballNames.add("Troy Apke");
    FootballNames.add("Matthew Baney");
    FootballNames.add("Saquon Barkley");

    VolleyballNames.add("Kendall White");
    VolleyballNames.add("Kaitlyn Hord");
    VolleyballNames.add("Bryanna Weiskircher");
    VolleyballNames.add("Nia Reed");
    VolleyballNames.add("Serena Gray");
    VolleyballNames.add("Alli Frantti");

    SoccerNames.add("Amanda Dennis");
    SoccerNames.add("Emily Ogle");
    SoccerNames.add("Ellie Jean");
    SoccerNames.add("Kat Asman");
    SoccerNames.add("Laura Suero");

/** for (String s: SoccerNames){
System.out.println(s);
}
*/

ArrayList<String> nList = new ArrayList<String>();
     String findString = "Kat Asman";

    for(String s: SoccerNames){
        if(s.contains(findString)){
            nList.add(s);
        }
        System.out.println(nList);
    }
}

private void fillInBigTable()
{
    bigArray.add(SoccerNames);
    bigArray.add(VolleyballNames);
    bigArray.add(FootballNames);


}


}



''''''''
public class app
{

public static void main(String[] args)
{
    ArraysPrep ap = new ArraysPrep();
}

}

我并不认为您需要遍历整个数组列表来查找其中是否包含元素

这:

for(String s: SoccerNames) {
    if(s.contains(findString)) {
        nList.add(s);
    }
}
可替换为以下内容:

if(nList.contains(findString)) {
    nList.add(s);
}
然后,您可以在bigArray中循环,并对每个数组列表执行类似的操作,以显示特定的名称

ArrayList<String> nList = new ArrayList<String>();
     String findString = "Kat Asman";
     List<String> lst = new ArrayList(Arrays.asList(SoccerNames));
     lst.addAll(Arrays.asList(FootballNames));
     lst.addAll(Arrays.asList(VolleyballNames));

    for(String s: lst){
        if(s.contains(findString)){
            nList.add(s);
        }
        System.out.println(nList);
    }  
可以使用的方法,这样就可以在一个循环中遍历所有三个数组


希望能奏效。

作为补充,我认为你应该为你的运动员使用带有多个字段的类

可能是这样的:

public class Athlete {

private String name;
private Sport sport;

public Athlete(String name, Sport sport) {
    this.name = name;
    this.sport = sport;
}

public String getName() {
    return name;
}

public Sport getSport() {
    return sport;
}
}

或者创建Athete接口的几个实现,如:

Volleyballist extends Atlete // or implements

因此,您可以只使用一个ArrayList并将所有运动员存储在其中并在其中进行搜索。

按照您处理问题的方式,我认为最好的解决方案是创建一个列表,从中选择其他3个运动员的值,然后使用搜索

private void lookingFor(String player){
    ArrayList<String> all = new ArrayList<String>();
    all.addAll(SoccerNames);
    all.addAll(FootballNames);
    all.addAll(VolleyballNames);

    for(String a : all) {
        if(player == a) {
            bigList.add(a);
            break;
        }
    }


    }
然后:

ArrayList<Player> players;
ArrayList<Player> bigList;

private void filterPlayer(String name){
for(Player p : players){
if(p.getName() == name){
bigList.add(p);
break;
}
}
}

首先,不要使用列表。使用集合-这些集合不允许重复,而且我确信你不需要在同一个列表中有一个玩家两次,我打赌这在你的域中毫无意义

Set有一个方法contains,它会告诉您元素是否包含在集合中,而不会立即出现任何循环

然后,如果您希望能够在不重复某项特定运动的情况下判断球员所在的集合(例如,他是否参加了足球、足球或排球),您可以将这些集合放在地图中,其中带有运动名称的字符串将是键,而集合将是值

是的,不要给出以大写字符开头的字段名的局部变量——这违反了Java代码约定

示例代码:

import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

public class Test {

    Map<String, Set<String>> sportsToPlayers = new LinkedHashMap<>();

    public void populatePlayers() {
        Set<String> footballPlayers = new LinkedHashSet<>();
        Set<String> volleyballPlayers = new LinkedHashSet<>();
        Set<String> soccerPlayers = new LinkedHashSet<>();

        footballPlayers.add("Marcus Allen");
        footballPlayers.add("Kyle Alston");
        footballPlayers.add("Troy Apke");
        footballPlayers.add("Matthew Baney");
        footballPlayers.add("Saquon Barkley");

        volleyballPlayers.add("Kendall White");
        volleyballPlayers.add("Kaitlyn Hord");
        volleyballPlayers.add("Bryanna Weiskircher");
        volleyballPlayers.add("Nia Reed");
        volleyballPlayers.add("Serena Gray");
        volleyballPlayers.add("Alli Frantti");
        // Added to test for multiple sports for 1 player
        volleyballPlayers.add("Kat Asman");

        soccerPlayers.add("Amanda Dennis");
        soccerPlayers.add("Emily Ogle");
        soccerPlayers.add("Ellie Jean");
        soccerPlayers.add("Kat Asman");
        soccerPlayers.add("Laura Suero");

        sportsToPlayers.put("Football", footballPlayers);
        sportsToPlayers.put("Volleyball", volleyballPlayers);
        sportsToPlayers.put("Soccer", soccerPlayers);
    }

    private Set<String> findPlayerSports(String playerName) {
        Set<String> result = new LinkedHashSet<>();
        for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
            String sportName = sportsToPlayersEntry.getKey();
            Set<String> playerNames = sportsToPlayersEntry.getValue();
            if (playerNames.contains(playerName)) {
                result.add(sportName);
            }
        }
        return result;
    }

    private String findPlayerSport(String playerName) {
        for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
            String sportName = sportsToPlayersEntry.getKey();
            Set<String> playerNames = sportsToPlayersEntry.getValue();
            if (playerNames.contains(playerName)) {
                return sportName;
            }
        }
        return null;
    }

    public Test() {
        populatePlayers();
    }

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        // Find all sports for player
        System.out.println(test.findPlayerSports("Kat Asman"));

        // Find one sport for player
        System.out.println(test.findPlayerSport("Kat Asman"));

    }
}

我不知道如何在不使用用户名的情况下显示Kat Asman。不使用用户名是什么意思?如果没有人在做什么运动的指标,你可以遍历所有的列表。谢谢你的帮助,我尝试在我的程序中执行这个,但是我在这两行中得到了一个错误------lst.addAllarray.asListFootballNames;lst.addallarray.asListVolleyballNames;Collection.addAll不适用,因为它具有不兼容的边界,下限为:ArrayList,上限为:String,Object。知道如何解决这个问题吗?System.arraycopy,0,0@试试看
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

public class Test {

    Map<String, Set<String>> sportsToPlayers = new LinkedHashMap<>();

    public void populatePlayers() {
        Set<String> footballPlayers = new LinkedHashSet<>();
        Set<String> volleyballPlayers = new LinkedHashSet<>();
        Set<String> soccerPlayers = new LinkedHashSet<>();

        footballPlayers.add("Marcus Allen");
        footballPlayers.add("Kyle Alston");
        footballPlayers.add("Troy Apke");
        footballPlayers.add("Matthew Baney");
        footballPlayers.add("Saquon Barkley");

        volleyballPlayers.add("Kendall White");
        volleyballPlayers.add("Kaitlyn Hord");
        volleyballPlayers.add("Bryanna Weiskircher");
        volleyballPlayers.add("Nia Reed");
        volleyballPlayers.add("Serena Gray");
        volleyballPlayers.add("Alli Frantti");
        // Added to test for multiple sports for 1 player
        volleyballPlayers.add("Kat Asman");

        soccerPlayers.add("Amanda Dennis");
        soccerPlayers.add("Emily Ogle");
        soccerPlayers.add("Ellie Jean");
        soccerPlayers.add("Kat Asman");
        soccerPlayers.add("Laura Suero");

        sportsToPlayers.put("Football", footballPlayers);
        sportsToPlayers.put("Volleyball", volleyballPlayers);
        sportsToPlayers.put("Soccer", soccerPlayers);
    }

    private Set<String> findPlayerSports(String playerName) {
        Set<String> result = new LinkedHashSet<>();
        for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
            String sportName = sportsToPlayersEntry.getKey();
            Set<String> playerNames = sportsToPlayersEntry.getValue();
            if (playerNames.contains(playerName)) {
                result.add(sportName);
            }
        }
        return result;
    }

    private String findPlayerSport(String playerName) {
        for (Map.Entry<String, Set<String>> sportsToPlayersEntry : sportsToPlayers.entrySet()) {
            String sportName = sportsToPlayersEntry.getKey();
            Set<String> playerNames = sportsToPlayersEntry.getValue();
            if (playerNames.contains(playerName)) {
                return sportName;
            }
        }
        return null;
    }

    public Test() {
        populatePlayers();
    }

    public static void main(String[] args) throws Exception {
        Test test = new Test();
        // Find all sports for player
        System.out.println(test.findPlayerSports("Kat Asman"));

        // Find one sport for player
        System.out.println(test.findPlayerSport("Kat Asman"));

    }
}