使用For循环在arrayLists之一中查找和显示特定元素

时间:2019-03-24 19:21:27

标签: java arrays arraylist

我需要使用一个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();
}

}

5 个答案:

答案 0 :(得分:0)

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

此:

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

可以替换为:

if(nList.contains(findString)) {
    nList.add(s);
}

然后,您可以遍历bigArray并对每个数组列表执行类似的操作以显示特定名称。

答案 1 :(得分:0)

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);
    }  

您可以使用Merging more than One arrays into a single array/list的方法,以便您可以迭代,只需一个循环即可遍历这三个数组。

希望有效。

答案 2 :(得分:0)

此外,我认为您应该对运动员使用带有多个字段的课程。

可能是这样的:

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 :(得分:0)

在您解决问题的方式中,我认为最好的解决方案是列出一个列表,从中选择其他3个对象的值,然后搜索。

App\User::find(1)->{$type . 'text'};

我没有测试。但是我认为您应该创建一个具有其名称,ID和他从事的运动的运动员类别,并选择该属性。这样,您甚至可以只列出一个列表,而不是四个。

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;
        }
    }


    }

然后:

public class Player {
    private Integer id;
    private String name;
    private String sport;

    public Player() {
        // TODO Auto-generated constructor stub
    }

    public Player(Integer id, String name, String sport) {
        super();
        this.id = id;
        this.name = name;
        this.sport = sport;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSport() {
        return sport;
    }

    public void setSport(String sport) {
        this.sport = sport;
    }


}

答案 4 :(得分:0)

首先,不要使用列表。使用组合-这些组合不允许重复,而且我敢肯定,您不需要两次将同一名球员列入同一名单(我敢打赌这对您的域没有意义)。

Set具有方法contains,它将告诉您元素是否包含在集合中或是否立即存在-没有任何循环。

然后,如果您希望在不重复特定运动的情况下分辨出球员包含在哪几套中(例如,他是在足球,橄榄球还是排球)-您可以将这些套放在{{1 }},其中带有运动名称的Map是键,而String是值。

是的,不要给出以大写字母开头的字段名称的局部变量-这违反Java代码约定。

示例代码:

Set<String>