Java 如何循环Arraylist,其中包含项,并且项具有多个变量

Java 如何循环Arraylist,其中包含项,并且项具有多个变量,java,Java,我有一个arraylist(mNamelist),它有一些项(NameItem),这些项包含两个变量(String和int)。我还有一个输入字段,用户在其中向列表中插入新名称 我需要检查列表中的每个项目,如果用户提供的名称不在这些项目中,那么它可以添加一个项目。如果找到匹配项,它应该敬酒并立即停止循环 我试过的东西: private void addItem(int position) { /** Get user input (name) **/ textAdd = findV

我有一个arraylist(mNamelist),它有一些项(NameItem),这些项包含两个变量(String和int)。我还有一个输入字段,用户在其中向列表中插入新名称

我需要检查列表中的每个项目,如果用户提供的名称不在这些项目中,那么它可以添加一个项目。如果找到匹配项,它应该敬酒并立即停止循环

我试过的东西:

private void addItem(int position) {
    /** Get user input (name) **/
    textAdd = findViewById(R.id.name_input);

    /** Check if that name already on a list **/
    for (int i = 0; i < mNameList.size(); i++) {

        /** Check namelists item, and in that item String variable named getText1 and check if it match to the name that user gave **/
        if (mNameList.get(i).getText1() == textAdd.toString().trim()) {
            /** If match, give toast and stop looping **/
            Toast toast= Toast.makeText(getApplicationContext(),
                    "This name is already on a list...", Toast.LENGTH_LONG);
            toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
            toast.show();
            break;
        } else {
            /** If no matches, add name to the list **/
            mNameList.add(position, new NameItem(textAdd.getText().toString().trim()));
            sortArrayList();
            saveData();
            mAdapter.notifyItemInserted(position);
            textAdd.getText().clear();
        }
    }
}
private void addItem(内部位置){
/**获取用户输入(名称)**/
textAdd=findviewbyd(R.id.name\u输入);
/**检查该名称是否已在列表中**/
对于(int i=0;i
很快我就意识到,这里的问题是,每次它无法获得匹配项时,它都会尝试添加该项。它应该做的是,在检查了所有项并且没有找到匹配项之后,它只应该添加一次新名称,而不是在每个循环中。
此外,如果找到匹配项,它应该给出Toast并立即停止循环。

如果您的api级别足够高,您可以使用java 8 stream api,或者每个循环使用一个简单的api来检查列表是否已经包含具有给定输入名称的条目。您只需遍历列表,并检查是否有任何nameItem包含与您的输入相同的名称。如果是的话,你可以烤面包。否则,您可以使用给定的输入创建新的nameItem并将其添加到列表中

private boolean alreadyContainsNameWithForEach(Collection<NameItem> mNames, String input){
    for(NameItem item : mNames){
        if(item.getName().equals(input)){
            return true;
        }
    }
    return false;
}

private boolean alreadyContainsNameWithStreams(Collection<NameItem> mNames, String input){
    return mNames.stream().anyMatch(nameItem -> nameItem.getName().equals(input));
}
private boolean alreadyContainsNameWithForEach(集合mNames,字符串输入){
对于(名称项目:mNames){
if(item.getName().equals(输入)){
返回true;
}
}
返回false;
}
私有布尔值AlreadyContainesNameWithStreams(集合名称、字符串输入){
返回mNames.stream().anyMatch(nameItem->nameItem.getName().equals(输入));
}

我认为
addItem
方法不是检查是否应添加项目的正确位置。在其他任何地方都可以这样做。如果您使用Java-8,您可以应用流式处理。为什么不使用foreach循环来循环数组列表,并用输入检查每个项的字符串变量呢?在Java中迭代列表的不同方法,因为我需要这样做,如果。。。如果循环找到列表中的字符串,则为列表指定Toast而不包含name,并且在检查了所有项且未找到任何匹配项后,仅在mNameList.add()及其后面的所有内容之后,然后在搜索列表时如果if条件为真,则在找到该字符串时仅显示Toast。到目前为止,您尝试了什么来循环数组列表。你能分享这些代码吗?如果你不能更新到api lvl 24,你也可以使用for-each循环。您必须遍历列表并检查是否有任何条目与给定的输入匹配。如果是的话,做你的吐司。否则,您可以添加该项。这将具有O(n)的性能。